这个文件名为Compiler_mean3tmp_修订版.rar的压缩包可能包含了一个编译器或者编程项目中mean3tmp的相关代码或资源的修订版本。请解压查看具体更新内容。
输入文件为Input.txt。Produce.txt包含LR1产生式,目前支持if、while、赋值以及基本的加法和乘法运算,但不处理嵌套结构或数组(你可以根据需要添加相应的文法规则)。Grammar.txt是从某个博客中获取的一个语法规范,看起来很可靠,但我没有进一步测试。该程序在功能上没有明显错误,但如果输入的文法存在左递归,则可能会导致堆栈溢出问题(这是算法设计的一部分),另外LR文法不能包含二义性,并且需要解决算术优先级的问题。如果加入嵌套结构,复杂度会显著增加,解析时间可能很长。
程序运行指南:
- gui.JtableParse3.java 显示LR1分析表,并对Input.txt中的内容进行语法分析。
- 输出词法分析结果到output.txt 文件中;输出规约过程(即使是短语句也可能产生较长的规约步骤)。
- letex.LexResult.java 展示词法分析的结果,列出所有识别出的单词。
LR1解析实现主要集中在Parse3包内,请根据类名自行查阅代码。几乎每个关键类都包含main()方法供你测试不同输入规则的效果(例如书上的例子:S -> S, S -> C, CC -> cC|d);结果与书中描述完全一致。
- ItemTable.java 用于生成所有集合及GOTO集;
- gotoTable.java 构建具体的goto表;
- ActionTable.java 创建动作表(在命令行中运行);
- parse.java 合并上述两张表格,并展示规约过程。
gui.JtableParse3.java 将这两张表整合成图形界面显示出来。欢迎你发现程序中的bug,尽管我已经仔细检查过但仍然可能有未被注意到的问题;你可以发布修复版本(记得标明原作者出处)。更详细的说明请参考我的博客文章。
【HIT哈工大编译原理实验】词法分析程序java
【编译原理】求first集合的代码实现java
【编译原理】求GOTO图的代码实现java
【编译原理】LL(1)分析法代码
以上内容写于2019年5月8日。