java编写的LALR1文法分析器

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

实际显示结果界面:

显示所有状态机:

相关文档
最新文档