資源簡介
北郵編譯原理實驗二:語法分析程序的設計與實現,源代碼和實驗報告

代碼片段和文件信息
package?parsing;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.util.ArrayDeque;
public?class?ForecastAnalysis?{
????private?static?ArrayDeque?mStack;
????private?static?ArrayDeque?mQuene;
????private?static?Parsing?solution?=?new?Parsing();
????public?static?void?initStackAndQuene()?throws?IOException?{
???? mStack?=?new?ArrayDeque<>();
???? mStack.push(‘$‘);
???? mStack.push(‘E‘);
???? mQuene?=?new?ArrayDeque<>();
???? BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in));
???? System.out.println(“請輸入你要進行語法分析的字符串,字符串只能保存數字和+,-,*,/,(,)六個符號:“);
???? String?str?=?br.readLine();
???? String?inputStr?=?““;
???? for(int?i=0;i ???? {
???? if(str.charAt(i)<=‘9‘&&str.charAt(i)>=‘0‘)
???? inputStr+=“n“;
???? else?inputStr+=(““+str.charAt(i));
???? }
???? //String?inputStr?=?“n+n/n“;
???? for(int?i=0;i ???? {
???? mQuene.offer(inputStr.charAt(i));
???? }
???? mQuene.offer(‘$‘);
???? //System.out.println(mStack);
???? //System.out.println(mQuene);
}
????public?static?void?judgeCompareResult(char?achar?b)?{
???? //如果棧頂非終結符
???? if(!judgeEndChar(a))
???? {
???? //查字母表是error
???? if(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].equals(“error“))
???? {
???? System.out.print(“出錯,M[“+a+““+b+“]為error,向前移動向前指針,舍去輸入符號“+mQuene.poll()+“\t“);
???? }
???? //查字母表是synch
???? else?if(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].equals(“synch“)){
???? System.out.print(“出錯,M[“+a+““+b+“]為synch,棧彈出“+mStack.pop()+“\t“);
}
???? //查字母表是推導出?的文法
???? else?if(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].charAt(1)?==?‘?‘){
???? String?aString?=?new?String(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].toCharArray()?1?
???? Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].length()-1);
???? System.out.print(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].charAt(0)+“-->“
???? ???????????+aString+“\t“);
???? mStack.pop();
}
???? else{
???? String?aString?=?new?String(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].toCharArray()?1?
???? Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].length()-1);
???? ???? System.out.print(Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)].charAt(0)+“-->“
???? ???? ???+aString+“\t“);
???? mStack.pop();
???? String?bString?=?Parsing.analysisTable[solution.chartMap.get(a)][solution.chartMap.get(b)];
???? for(int?i=bString.length()-1;i>=1;i--)
???? {
???? mStack.push(bString.charAt(i));
???? }
}
???? }
???? else
???? {
???? if(a?!=?b)//棧頂終結符號和當前輸入符號不匹配
???? {
???? mStack.pop();
???? System.out.print(“棧頂符號“+a+“和當前輸入符號“+b+“不匹配彈出棧頂符號“+“\t“);
???? }
???? else//棧頂終結符哈和當前輸入符號匹配
???? {
???? mStack.pop();
???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4959??2016-11-19?11:41??ForecastAnalysis.java
?????文件????????7433??2016-11-19?12:16??Parsing.java
?????文件?????1123914??2016-11-19?12:33??瀹為獙浜岋細璇硶鍒嗘瀽紼嬪簭鐨勮璁′笌瀹炵幇.pdf
?????目錄???????????0??2016-11-19?12:35??__MACOSX\
?????文件?????????187??2016-11-19?12:33??__MACOSX\._瀹為獙浜岋細璇硶鍒嗘瀽紼嬪簭鐨勮璁′笌瀹炵幇.pdf
評論
共有 條評論