• 大小: 1021KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-28
  • 语言: 其他
  • 标签:

资源简介

北邮编译原理实验二:语法分析程序的设计与实现,源代码和实验报告

资源截图

代码片段和文件信息

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

评论

共有 条评论