实验二语法分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()→| | ( expression())

Condition()→expression()(

< expression()

| > expression()

| >= expression()

| <= expression() )

〈运算符〉→+|-|*|/

〈关系符〉→<|<=|>|>=|==|!=

2.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩展名为jj)

文件见附件wenfa.jj

Eclipse中文件结构如下:

运行结果如下:

3.完成的功能包括词法分析,语法分析(输出语法树),能够读文件,也能够把输出的结果保存文件中,可以把树的层次结果输出到文件中。

四、实习总结

本次实验的难点主要在于对javacc的不熟悉,其次是在编码过程中要耐心的分析语法,函数之间有相互嵌套,要掌握好嵌套的方式。好在老师给了while的语法分析示例,做起来才稍微轻松了一点。本次实验有一个输出到文件的任务没有完成,原因是对语法树的了解还有些不清楚,对java也有些忘记,希望之后对这些方面有进一步的了解。

相关文档
最新文档