{"", D->TL, T->i, T->f, L->L,x, L->x }; 1.消除左递归 2.构造First和Follow集合 3.构造LL(1)分析表 4.是不是LL(1)文法
时间: 2024-05-23 20:12:06 浏览: 94
输入已经消除左递归的以及提取公共左因子的LL(1)文法,再输入相应的表达式,若分析成功,则在递归输出过程中输出"acc",若不成功,则有相应的报错以及位置指名。注意,要把同一个非终结符的产生式分成单个输入。他会自动计算first,follow,预测分析表的构造,但并不输出。
3星 · 编辑精心推荐
1. 消除左递归:
首先,将产生式改写为如下形式:
D -> TL
T -> i | f
L -> xL' | x
然后,对于产生式 L -> xL' | x 进行左递归消除,得到如下形式:
L -> xL'
L' -> ε | xL'
最终,消除左递归后的文法为:
D -> TL
T -> i | f
L -> xL'
L' -> ε | xL'
2. 构造 First 和 Follow 集合:
First(D) = {i, f}
First(T) = {i, f}
First(L) = {x}
First(L') = {ε, x}
Follow(D) = {$}
Follow(T) = {L, $}
Follow(L) = {T}
Follow(L') = {T}
3. 构造 LL(1) 分析表:
| | i | f | x | $ |
|----|---|---|---|---|
| D | 1 | 1 | | |
| T | 2 | 3 | | |
| L | | | 4 | |
| L' | 6 | 6 | 5 | 5 |
其中,数字表示对应的产生式编号。
4. 判断是否为 LL(1) 文法:
对于每个非终结符 A、终结符 a,如果有两个产生式 A -> α | β,且 First(α) ∩ First(β) ≠ ∅,则该文法不是 LL(1) 文法。
在该文法中,有 L' -> ε 和 L' -> xL' 两个产生式,且 First(ε) ∩ First(xL') = {x} ≠ ∅,因此该文法不是 LL(1) 文法。
阅读全文