const char *p[]={ "", "D->TL", "T->i", "T-f", "L-l,x", "L->x", }; 1.消除左递归 2.构造First和Follow集合 3.构造LL(1)分析表 4.是不是LL(1)文法
时间: 2023-09-21 07:07:14 浏览: 73
输入已经消除左递归的以及提取公共左因子的LL(1)文法,再输入相应的表达式,若分析成功,则在递归输出过程中输出"acc",若不成功,则有相应的报错以及位置指名。注意,要把同一个非终结符的产生式分成单个输入。他会自动计算first,follow,预测分析表的构造,但并不输出。
3星 · 编辑精心推荐
1. 消除左递归
将文法改写为:
D -> TL
L -> xL'
L' -> ,xL' | ε
T -> i | f
2. 构造 First 和 Follow 集合
First(D) = {i, f}
First(T) = {i, f}
First(L) = {x}
First(L') = {,ε}
Follow(D) = {$}
Follow(L) = {)}
Follow(L') = {)}
Follow(T) = {,)}
3. 构造 LL(1) 分析表
| | i | f | x | , | ( | ) | $ |
|---|---|---|---|---|---|---|---|
| D | 1 | 1 | | | | | |
| L | | | 3 | | 2 | 2 | |
| L' | | | 4 | 5 | | 6 | 6 |
| T | 7 | 8 | | | | | |
其中,1 表示 D -> TL,2 表示 L -> xL',3 表示 L -> xL',4 表示 L' -> ,xL',5 表示 L' -> ε,7 表示 T -> i,8 表示 T -> f。
4. 判断是否为 LL(1) 文法
通过构造的 LL(1) 分析表可以看出,每个非终结符的每个产生式的 First 集合两两不相交,因此这是一个 LL(1) 文法。
阅读全文