如何判断LL(1)文法并举例
时间: 2023-09-07 19:11:29 浏览: 108
试说明没有一个左递归文法可以是LL的。-编译原理(陈意云)第二版答案
我在上一个回答中已经介绍了如何判断LL(1)文法,这里再举一个例子来说明。
假设有以下文法:
```
S -> Aa | Bb
A -> c | ε
B -> d | ε
```
1. 消除左递归:由于文法中不存在直接左递归,也不存在间接左递归,因此不需要进行消除左递归的操作。
2. 求FIRST集:
```
FIRST(S) = {c, d}
FIRST(A) = {c, ε}
FIRST(B) = {d, ε}
```
3. 求FOLLOW集:
```
FOLLOW(S) = {$}
FOLLOW(A) = {a, $}
FOLLOW(B) = {b, $}
```
4. 构造LL(1)分析表:
| | c | d | a | b | $ |
|----|-----|-----|-----|-----|-----|
| S | S->Aa | S->Bb | | | |
| A | A->c | | A->ε | | A->ε |
| B | | B->d | | B->ε | B->ε |
5. 判断是否是LL(1)文法:根据上表,我们可以发现每个非终结符的FIRST集和FOLLOW集没有交集,因此这个文法是LL(1)文法。
综上所述,这个文法是LL(1)文法。
阅读全文