实验二语法分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二、语法分析
一、实验目的:
设计MiniC的上下文无关文法,利用JavaCC生成调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、语法分析器:
按照MiniC语言的语法规则检查词法分析输出的记号流是否符合这些规则,并根据这些规则所体现出的语言中的各种语法结构的层次性。把规则写入到JavaCC的.jjt文件中,可以生成树状的层次结构。
三、JavaCC:
在JavaCC的文法规范文件中,不仅可以描述语言的语法规范,而且可以描述词法规范,本次实习中,利用JavaCC以MiniC语言构造一个不含语义分析的编译器前端,包括词法分析、语法分析,并要考虑语法分析中的错误恢复问题。通过使用JavaCC, 可以体会LL(k)文法的编写特点,掌握编写JavaCC文法规范文件的方法。
内容:利用JavaCC生成一个MiniC的语法分析器;
要求:
1.用流的形式读入要分析的C语言程序,或者通过命令行输入源程序。
2.具有错误检查的能力,如果有能力可以输出错误所在的行号,并简单提示
3.如果输入的源程序符合MiniC的语法规范,输出该程序的层次结构的语法树
具体实施步骤如下:
1.把MiniC转换为文法如下
Procedure()→void main() {WhileStatement()}
WhileStatement()→while(Condition()){(WhileStatement()|ass
ign())}
assign()→
expression()→term() (( + | - ) term())
term()→unary() (( * | / ) unary())
unary()→
Condition()→expression()(
< expression()
| > expression()
| >= expression()
| <= expression() )
〈运算符〉→+|-|*|/
〈关系符〉→<|<=|>|>=|==|!=
2.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩展名为jj)
文件见附件wenfa.jj
Eclipse中文件结构如下:
运行结果如下:
3.完成的功能包括词法分析,语法分析(输出语法树),能够读文件,也能够把输出的结果保存文件中,可以把树的层次结果输出到文件中。
四、实习总结
本次实验的难点主要在于对javacc的不熟悉,其次是在编码过程中要耐心的分析语法,函数之间有相互嵌套,要掌握好嵌套的方式。好在老师给了while的语法分析示例,做起来才稍微轻松了一点。本次实验有一个输出到文件的任务没有完成,原因是对语法树的了解还有些不清楚,对java也有些忘记,希望之后对这些方面有进一步的了解。