编译原理 实验二 LL(1)分析法 Java版

本文介绍了LL(1)分析法实验的目的,包括理解预测分析法与递归子程序法的区别,通过实现语法分析程序掌握分析原理。核心内容涉及文法构造、First集和Follow集的构建规则,以及如何用LL(1)方法分析特定文法。实验还提供了关键步骤和算法描述,展示了如何处理输入字符串并创建分析表进行分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译原理 实验二 LL(1)分析法

一、 实验目的

通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区

别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方

法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培

养适应社会多方面需要的能力。

二、 写出 LL(1)分析法的思想及写出符合 LL(1)分析法的文法

对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的产生式A—>α|β 满足下列条件:

(1)如果α、β均不能推导出ε,则 FIRST(α) ∩ FIRST(β) = ∅。

(2)α 和 β 至多有一个能推导出 ε。

(3)如果 β *═> ε,则 FIRST(α) ∩ FOLLOW(A) = ∅。

将满足上述条件的文法称为LL(1)文法。

First****构造:

对每一文法符号XÎVT∪VN构造FIRST(X),连续使用下面的规则,直至每个集合FIRST不再增大为止:

\1. 若XÎVT,则FIRST(X)={X}。

\2. 若XÎVN,且有产生式X→a…,则把a加入到FIRST(X)中;若X→e也是一条产生式,则把e也加到FIRST(X)中。

Follow****构造:

对于文法G的每个非终结符A构造FOLLOW(A)的办法是,连续使用下面的规则,直至每个FOLLOW不再增大为止:

\1. 对于文法的开始符号S,置#于FOLLOW(S)中;

\2. 若A→aBb是一个产生式,则把FIRST(b){e}加至FOLLOW(B)中;

\3. 若A→aB是一个产生式,或A®aBb是一个产生式而b→e (即eÎFIRST(b)),则把FOLLOW(A)加至FOLLOW(B)中。

实验要求:

1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。

2、如果遇到错误的表达式,应输出错误提示信息。

3、对下列文法,用 LL(1)分析法对任意输入的符号串进行分析:

(1)E->TG

(2)G->+TG|—TG

(3)G->ε

(4)T->FS

(5)S->*FS|/FS

(6)S->ε

(7)F->(E)

(8)F->i

三、 程序结构描述

函数名称及调用格式返回类型参数含义返回值描述函数功能
void init()用来得到终结符和非终结符
void createFirstSet(Character c) 传入终结符或非终结符得到一个符号的first集
void creatFirstMap()对所有终结符和非终结符得到对应的First集
void creatFirstSSet(String s)候选式得到一个候选式的first集
void creatFirstSMap()得到非终结符任意候选式的first集
void createFollowSet(Character ch) 一个非终结符得到该终结符的follow集
void createFollowMap()得到所有非终结符的follow集
void creatTable()创建分析表
void print()打印first集,follow集和分析表
String getStack()栈中的字符串返回栈中的字符串
void analyze() 根据分析表进行LL(1)分析
MyFrame(String title) 标题字符这是构造器,为了将输出界面化
void actionPerformed(ActionEvent actionEvent)响应事件主要为按钮绑定事件,进行语法分析
void main(String[] args)`` Main参数Main方法,执行入口

四、 详细的算法描述

在这里插入图片描述

根据LL(1)文法的具体算法,首先对输入字符串进行初始化,生成终结符非终结符和产生式等。接着构造first集,follow集,还有相应的table表等,最后根据table表分析相应的句子。

五、 结果和代码

在这里插入图片描述

可以多次输入,输出结果也会增加到后面。
有用的话,请不要吝啬,动动小手点个赞把~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦中情几许

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值