文法如下,请用LL(0)给出输入串i*i+i的自顶向下分析过程 G[E]: E → E+T|T T → T*F|F F → (E)|i
时间: 2023-06-14 12:06:10 浏览: 117
首先,我们需要将文法转化为 LL(0) 文法,即消除左递归和提取左公因子:
G[E]:
E → TE'
E' → +TE' | ε
T → FT'
T' → *FT' | ε
F → (E) | i
消除左递归后,可以得到:
G[E]:
E → TF
F → (E) | i
T → FT'
T' → *FT' | ε
E' → +TE' | ε
接下来,我们可以使用 LL(0) 分析法进行自顶向下分析。
(i*i+i) 的分析过程如下:
输入串:( i * i + i ) $
初始符号:E
使用产生式 E → TF,推导得到:
E → TF
T → FT'
F → (E) | i
当前符号:(
输入串:i * i + i ) $
使用产生式 F → i,推导得到:
E → TF
T → FT'
F → i
当前符号:*
输入串:i + i ) $
使用产生式 T' → ε,推导得到:
E → TF
T → F
F → i
当前符号:+
输入串:i ) $
使用产生式 E' → +TE',推导得到:
E → TF
T → F
F → i
E' → +TE'
T → FT'
F → i
当前符号:i
输入串:) $
使用产生式 F → i,推导得到:
E → TF
T → F
F → i
E' → +TE'
T → ε
当前符号:)
输入串:$
使用产生式 E' → ε,推导得到:
E → TF
T → F
F → i
E' → ε
推导完成,输入串被成功分析。
相关问题
文法G: E->E+T|T T->T*F|F F->i|(E)下面用预测分析法的总控程序、分析栈和预测分析表对输入串i+i*i进行分析,给出输入串T的分析过程
首先,我们需要构造预测分析表如下:
| + | * | i | ( | ) | $ |
| -------- | ------- | ------ | ------ | ------ | ------ |
| E -> TE' | | E -> TE' | E -> TE' | | |
| | T' -> *FT' | | | T' -> ε | T' -> ε |
| T -> FT' | | T -> FT' | T -> FT' | | |
| | F -> ε | F -> i | F -> (E) | | |
接下来,我们用总控程序和分析栈对输入串i+i*i进行分析。初始时,分析栈中只有$符号,总控程序从左到右扫描输入串并依次进行匹配。
| 总控程序 | 分析栈 | 剩余输入串 |
| -------------- | ------------ | ---------------- |
| | $ | i+i*i$ |
| | E$ | i+i*i$ |
| E -> TE' | T$ | i+i*i$ |
| T -> FT' | F$ | i+i*i$ |
| F -> i | i$ | +i*i$ |
| | + | +i*i$ |
| E -> TE' | T+ | i*i$ |
| T -> FT' | F+ | i*i$ |
| F -> i | i+ | *i$ |
| | * | *i$ |
| T -> FT' | F*T | i$ |
| F -> i | i*T | i$ |
| | T+i | i$ |
| T -> FT' | F+T+i | $ |
| F -> i | i+T+i | $ |
| | E+i | $ |
| E -> TE' | T+i | $ |
| T -> FT' | F+i | $ |
| F -> i | i | $ |
最终得到了一个合法的推导式:E -> TE' -> T -> FT' -> F -> i -> i + T -> F + T -> F * T -> i * T -> i。输入串i+i*i符合文法G的语法规则。而输入串T的分析过程如下:
| 总控程序 | 分析栈 | 剩余输入串 |
| -------------- | ------------ | ---------------- |
| | $ | T$ |
| | E$ | T$ |
| E -> TE' | T$ | T$ |
| | T | T$ |
| T -> FT' | F$ | *i$ |
| F -> i | i$ | *i$ |
| | * | i$ |
| T -> FT' | F*T | i$ |
| F -> i | i*T | i$ |
| | T+i | i$ |
| T -> FT' | F+T+i | $ |
| F -> i | i+T+i | $ |
| | E+i | $ |
| E -> TE' | T+i | $ |
| T -> FT' | F+i | $ |
| F -> i | i | $ |
可以看到,T最终被成功分析出来,并得到了合法的推导式:T -> FT' -> F -> i。
用预测分析法的总控程序、分析栈和预测分析表对输入串i+i*i进行分析,给出输入串T的分析过程
预测分析法的总控程序、分析栈和预测分析表对输入串i+i*i进行分析的过程:
1. 总控程序读入输入串i+i*i和预测分析表。
2. 初始化分析栈,将#和文法G的起始符号E入栈。
3. 读入输入串的第一个字符i,将i和E出栈,将E->T填入输出结果中。
4. 查找预测分析表中M[T, +],发现T->F,将T和+出栈,将F入栈。输出结果中添加T->F。
5. 读入输入串的下一个字符i,将i和F出栈,将F->i填入输出结果中。
6. 查找预测分析表中M[T, *],发现T->T*F,将T和*出栈,将T*F入栈。输出结果中添加T->T*F。
7. 查找预测分析表中M[F, i],发现F->i,将T*和i出栈,将i入栈。输出结果中添加F->i。
8. 查找预测分析表中M[T, i],发现T->F,将i和F出栈,将F入栈。输出结果中添加T->F。
9. 查找预测分析表中M[T, #],发现T->T*F,将#和T*F出栈,分析成功。
10. 输出结果:E->T->T*F->F->i+i*i。
分析栈的变化过程如下:
|#|E|
|-|-|
|#|T|
|#|F|
|i| |
|i|T|
|+|F|
|i| |
|*|T*F|
|i|F|
|#| |
其中,#表示栈底,空表示栈内元素已出栈。
输出结果的变化过程如下:
|输出结果|
|-|
|E->T|
|E->T->T*F|
|E->T->T*F->F|
|E->T->T*F->F->i|
|E->T->T*F->F->i+i|
|E->T->T*F->F->i+i*i|