📄 controller.java
字号:
package cminus;
/**
* 控制整个编译流程的主类
*
* @author Administrator
*
*/
public class Controller
{
private Parser scanner;// 词法分析器类
private String grammarfilename;//文法文件名
private String programfilename;//程序文件名
private ParsingTree tree;//分析树类
private TreeFrame treeFrame;//图形化显示分析树的类
/***
* 构造函数
*/
public Controller()
{
scanner = new Parser();
this.grammarfilename = "D:/ComplierLab/ComplierLab/src/cminus/grammar";
tree = new ParsingTree(this.grammarfilename);
treeFrame = new TreeFrame(tree);
this.programfilename = "D:/ComplierLab/ComplierLab/src/cminus/test.cm";
}
public void doScannerWork()
{
try
{
scanner.setSourceFile(programfilename);
scanner.getToken();
scanner.showTokens();
} catch (Exception e)
{
System.err.println("Scanning error: " + e.getMessage());
}
}
public void doFirstSetWork()
{
try
{
tree.addToList(); // 将文法文件装入数据结构
tree.validateGrammar();// 检查文法有无语法错误
tree.getFirstSet(); // 得到初期存储在多个链表中的first集合
tree.constructFirstSet(); // 将多个链表存储的first集合装入vector中。
tree.printFirstSet();
} catch (Exception e)
{
System.err.println("Generating first set error: " + e.getMessage());
}
}
public void doFollowSetWork()
{
try
{
tree.getFollowSet();
tree.constructFollowSet();
tree.printFollowSet();
tree.isLL1();
} catch (Exception e)
{
System.err.println("Generating follow set error: " + e.getMessage());
}
}
public void doParsingTableWork()
{
try
{
tree.initParsingTable();
tree.constructParsingTable();
tree.printParsingTable();
} catch (Exception e)
{
System.err.println("Generating parsing table error:" + e.getMessage());
}
}
public void doParsingTreeWork()
{
try
{
tree.setStackToken();
tree.setStackTokenType();
tree.parsingAction();
treeFrame.init();
treeFrame.displayParsingTree();
} catch (Exception e)
{
System.err.println("Generating parsing tree error:" + e.getMessage());
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Controller control = new Controller();
control.doScannerWork();
control.doFirstSetWork();
control.doFollowSetWork();
control.doParsingTableWork();
control.doParsingTreeWork();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -