当前位置:文档之家› 实验二语法分析

实验二语法分析

实验二、语法分析
一、实验目的:
设计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()→<IDENTIFIER>= <CONSTANT>;
expression()→term() (( + | - ) term())
term()→unary() (( * | / ) unary())
unary()→<CONSTANT>|<IDENTIFIER> | ( expression())
Condition()→expression()(
< expression()
| > expression()
| >= expression()
| <= expression() )
〈运算符〉→+|-|*|/
〈关系符〉→<|<=|>|>=|==|!=
2.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩展名为jj)
文件见附件wenfa.jj
Eclipse中文件结构如下:
运行结果如下:
3.完成的功能包括词法分析,语法分析(输出语法树),能够读文件,也能够把输出的结果保存文件中,可以把树的层次结果输出到文件中。

四、实习总结
本次实验的难点主要在于对javacc的不熟悉,其次是在编码过程中要耐心的分析语法,函数之间有相互嵌套,要掌握好嵌套的方式。

好在老师给了while的语法分析示例,做起来才稍微轻松了一点。

本次实验有一个输出到文件的任务没有完成,原因是对语法树的了解还有些不清楚,对java也有些忘记,希望之后对这些方面有进一步的了解。

相关主题