请将Exp →LP Exp RP | MINUS Exp | ID LP Args RP | INT | FLOAT Args → Exp COMMA Args | Exp转换为LL(1)文法,并给出转换过程和得到的LL(1)文法
时间: 2024-01-23 08:02:43 浏览: 91
将原文法进行左递归消除和提取公因子的操作,得到如下的中间文法:
```
Exp → MINUS Exp | ID ExpTail | INT | FLOAT
ExpTail → LP Args RP | ε
Args → Exp ArgsTail | ε
ArgsTail → COMMA Exp ArgsTail | ε
```
再将中间文法进行拆分和合并的操作,得到如下的LL(1)文法:
```
Exp → MINUS Exp | ID LP Args RP | INT | FLOAT
Args → Exp ArgsTail | ε
ArgsTail → COMMA Exp ArgsTail | ε
```
转换过程如下:
1. 消除左递归,得到
```
Exp → MINUS Exp | ID ExpTail | INT | FLOAT
ExpTail → LP Args RP | ε
Args → Exp ArgsTail | ε
ArgsTail → COMMA Exp ArgsTail | ε
```
2. 提取公因子,得到
```
Exp → MINUS Exp1 | ID ExpTail | INT | FLOAT
Exp1 → Exp2 | FLOAT
Exp2 → LP Args RP
ExpTail → LP Args RP | ε
Args → Exp ArgsTail | ε
ArgsTail → COMMA Exp ArgsTail | ε
```
3. 拆分和合并,得到
```
Exp → MINUS Exp1 | ID LP Args RP | INT | FLOAT
Args → Exp ArgsTail | ε
ArgsTail → COMMA Exp ArgsTail | ε
```
阅读全文