考虑文法G(A): A→ aABl | a B→ Bb | d (1) 试给出与G(A)等价的LL(1)文法 (2) 计算这个无左递归的文法的每个非终结符的 FIRST 集和 FOLLOW 集 (3) 构造无左递归文法的LL(1)分析表
时间: 2023-07-16 20:14:25 浏览: 127
(1) 给出的文法G(A)是不是LL(1)文法?观察可得文法G(A)不是LL(1)文法,因为A可以推出a,也可以推出aB,这两个产生式的FIRST集存在交集。于是需要对文法G(A)进行改写,使之成为LL(1)文法。
改写如下:
```
A -> aX
X -> Bl | ε
B -> dB'
B' -> Bb | ε
```
(2) 计算FIRST集和FOLLOW集
- FIRST(A) = {a}
- FIRST(X) = {ε, b}
- FIRST(B) = {d}
- FIRST(B') = {ε, b}
- FOLLOW(A) = {$, l}
- FOLLOW(X) = {l}
- FOLLOW(B) = {l}
- FOLLOW(B') = {l}
(3) 构造LL(1)分析表
| | a | b | d | l | $ |
|----|---|---|---|---|---|
| A | 1 | | | | |
| X | 1 | 2 | | | 2 |
| B | | 3 | 4 | | |
| B' | | 5 | 6 | 5 | 6 |
其中,数字表示使用的产生式编号。可以看到,在表中没有冲突,因此该文法是LL(1)文法。
相关问题
已知文法 G [ A ]: A→aAblc , (1)说明该文法是 LR (0)文法 (2)构造相应分析表;
对于第一个问题,该文法是 LR(0) 文法,因为它满足以下两个条件:
1. 产生式右部没有公共前缀;
2. 每个非终结符的不同产生式右部,其首符号互不相同。
对于第二个问题,可以按以下步骤构造相应的 LR(0) 分析表:
Step 1: 计算 FIRST 集合和 FOLLOW 集合
- FIRST(A) = {a}
- FIRST(b) = {b}
- FIRST(c) = {c}
- FOLLOW(A) = {$}
- FOLLOW(a) = {b}
Step 2: 构造 LR(0) 项集族
- I0: A' → ·A, $
- I1: A → ·aAblc, $
- I2: A → a·Ablc, b
- I3: A → ab·Ab, lc
- I4: A → abl·c, $
- I5: A → aAb·lc, $
- I6: A → aAbl·c, $
Step 3: 构造 LR(0) 分析表
状态 | a | b | c | $ |
----- | --- | ---- | ----- | ---- |
I0 | S1 | | | |
I1 | | | | ACC |
I2 | S1 | S3 | | |
I3 | | | S4 | |
I4 | | | | R1 |
I5 | | S6 | | |
I6 | | | S7 | |
其中,S 表示 Shift 操作,R 表示 Reduce 操作,ACC 表示接受状态。
我们可以发现,该文法是 SLR(1) 的,因为在构造 LR(0) 项集族时没有出现冲突状态。
AaBbCeDx AaBbCeDe AaBl 1.+Write+a+pregram+to+count+cecurrenoes(出现久数)+of+ench+different+werd+in+a+fil
以下是对于字符串"AaBbCeDx"和"AaBbCeDe"的处理结果:
1. 将字符串"AaBbCeDx"按照大小写分组,得到短语:Aa、Bb、Ce、Dx。
2. 将字符串"AaBbCeDe"按照大小写分组,得到短语:Aa、Bb、Ce、De。
以下是对于句型"AaBl"的处理结果:
1. 将句型"AaBl"按照大小写分组,得到短语:Aa、Bl。
2. 直接短语为:Aa、Bl。
3. 句柄为:Aa。
以下是对于句型"P+T+(E+i)"的处理结果:
1. 将句型"P+T+(E+i)"按照符号分组,得到短语:P、T、(E+i)、P+T、T+(E+i)、P+T+(E+i)。
2. 直接短语为:P、T、(E+i)。
3. 句柄为:P。
阅读全文