⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller.java

📁 C语言的词法、语法分析器 输出语法分析树
💻 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 + -