java编写的LALR1文法分析器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[键入文档标题]
[键入文档副标题]
[键入作者姓名]
0806230331
LALR1文法分析器
一、题目简介
1、目的
a)巩固LR(1)、LALR(1)语法分析的原理知识。
b)通过对语法分析表的自动生成加深语法分析表的认识,以及语法分析过程。
c)理解并处理语法分析中的异常和错误。
2、要求
已知给定如下文法G(S):
0: S’->S;
1: S->E
2: E->E+T
3: E->T
4: T->(E)
5: T->a
要求实现以下功能:
Ⅰ.编写实现给定文法的LR分析的程序以及在此基础上实现的LALR(1)分析过程
a.计算每个非终结符的first集和follow集
b.初始项目集扩大以及判断是否需要生成新项目集
c.同心集合并以及预测分析表的合并
Ⅱ.打印每个LALR(1)的每个项目集
Ⅲ.打印该文法的预测分析表
Ⅳ.根据生成的预测分析表判断输入串是否合法,若不合法则给出相应的提示信息,若合法打印每个合法输入串的语法树
二、预期结果
1
2、打印出该文法的所有化简后的状态,并且给出给状态之间的转换过程。
手工推导出的化简的状态机图如下:
化简后的状态机图如下:
3、输入句子,判断该句子是否为该文法的句子,是则画出语法树。
例1:如果输入ab。
结果:因为b不为文法中的终结符,故显示输入错误。
例2:如果输入a(a)。
结果:虽然所有字符都是文法中的终结符,但因不符合文法,故显示错误提示信息。
例3:如果输入a+a。
结果:该句子符合该文法,所以显示正确的提示信息,并且画出语法树。语法树样例如下:
三、分析过程
该文法分析器的构造思路为:首先求出该文法的First集合和Follow集合;据此导出文法的LR(1)分析的状态机;接下来化简LR(1)得到LALR(1)状态;然后,画出LALR(1)型的分析表;最后根据生成的分析表判断输入的句子是否为该文法的句子。
构造过程如下:
由于本利程采用图形化界面,图像化界面设计原型如下:
输入框:在这里输入需要判断的字符串:
显示分析结果的界面如下:
四、实际结果
实际输入界面:
输入例如“ab”错误时:应该显示如下提示信息:
实际显示结果界面:
显示所有状态机: