编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)

简介: 编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)

需要原卷和答案请点赞关注收藏后评论区留言私信~~~

有问题可以在评论区讨论~~~

一、LL(1)文法的定义

LL(1)文法:从文法的开始符,向下推导,推出句子。

对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的

产生式A—>α|β 满足下列条件:

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

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

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

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

因为自顶向下的语法处理不了左递归与左公因子,因此要先消除

1:消除左递归

由于自上而下的分析方法不允许文法含有左递归。

因此对于包含直接左递归和间接左递归的文法都要消除左递归。

直接消除左递归比较容易。

例如:

  P->Pa | b

直接消除左递归

  P->bP'

  P'->aP' | ε

2:提左因子

如果不提左因子,当面临两个相同的前缀,不知道选择哪条,必然会产生回溯。为了消除回溯,我们需要提左因子。

二、LL(1)文法判断实战

Consider the following grammar G[S]:

S→(L)|aS’

S’→S|ε

L→SL’

L’→SL’|ε

首先我们要求出各个非终结符的first集和follow集,这个也不复杂,规则如下

计算单个文法符号X的FIRST(X)时,不断应用以下规则,直到没有新的终结符或者是ε加入。

(1)如果X是终结符号,那么FIRST(X)={X}

(2)如果X是非终结符号,且X->ε是一个产生式,那么ε在FIRST(X)中。

(3)如果X是非终结符号,且X->Y1Y2…Yk是产生式

—如果ε在FIRST(Y1), FIRST(Y2),…, FIRST(Y i-1)中,那么FIRST(Yi)中的非ε元素,也在FIRST(X)中。

—如果ε在FIRST(Y1), FIRST(Y2),…, FIRST(Yk)中,那么ε在FIRST(X)中。(PS:注意这里是k,也就是说要所有都能推出 ε 才能说明 ε 在FIRST(X)

follow集求解规则如下

将右端结束标记 $ 放到FOLLOW(S)中,S是开始符号。

按下面的两个规则不断迭代,直到没有新的终结符或者是ε加入。

①如果存在产生式A->αBβ,那么FIRST(β)-{ε}【表示除了ε之外的符号】的符号都在FOLLOW(B)中。

②如果存在产生式A->αB,或者A->αBβ且FIRST(β)包含ε,那么FOLLOW(A)中所有符号都加入到FOLLOW(B)中。

上述文法求解如下

接下来判断是不是LL(1)文法要求出select集,当然求出first和follow集之后求select集就简单多了

select(X->Y),先求first(Y),如果first(Y)存在#∈first(Y)的情况,则再求follow(X),最后求两者的并集即可即可

LL(1)判断方法:如果相同产生式左部的Select集有交集,则该文法不为LL(1)文法

上述文法判断结果如下:S’→S|ε : ε in First(S’), and First(S’) ∩ Follow(S’)≠Φ, So the grammar is not LL(1)

三、LL(1)分析表构造

有了上面求出的first,follow,select集之后构造分析表就简单许多了,可以理解为根据select集构造分析表,结果如下

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
自然语言处理 编译器
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
1306 0
|
编译器
区分LR(0),SLR(1),LR(1)和LALR(1)
区分LR(0),SLR(1),LR(1)和LALR(1)
2196 1
|
9月前
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
577 1
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
2264 1
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
奈氏准则、香农公式、最大码元速率与最大信息速率
奈氏准则、香农公式、最大码元速率与最大信息速率
2911 0
|
缓存 Java 应用服务中间件
【Tomcat】史上最全下载、安装配置及使用教程,(2022最新..建议收藏,教学)附Tomcat常见报错解决方法
【Tomcat】史上最全下载、安装配置及使用教程,(2022最新..建议收藏,教学)附Tomcat常见报错解决方法
5641 1
【Tomcat】史上最全下载、安装配置及使用教程,(2022最新..建议收藏,教学)附Tomcat常见报错解决方法
构造LR(0)分析表和SLR(1)分析表
构造LR(0)分析表和SLR(1)分析表
1078 0
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
444 5
|
机器人 Java 编译器
2024年睿抗机器人开发者大赛(RAICOM)CAIP-编程技能赛-本科组省赛_题解
这篇文章是关于2024年睿抗机器人开发者大赛(RAICOM)CAIP-编程技能赛-本科组省赛的题解,作者分享了自己的得分和比赛经历,以及对比赛过程中出现问题的不满,同时提供了几道题目的解题思路和代码实现。
|
机器学习/深度学习 数据可视化 Python
No module named 'pytorch_wavelets'问题如何解决
【6月更文挑战第21天】No module named 'pytorch_wavelets'问题如何解决
1914 0