第四章作业
4.2.1
- S→SS∗→SS+S∗→aS+S∗→aa+S∗→aa+a∗
- S→SS∗→Sa∗→SS+a∗→Sa+a∗→aa+a∗
- 如下图
- 略
- 所有的后缀表达式的集合组成的加法和乘法
4.4.1
(5) S→(L)|a 以及 L→L,S|S
- 提取左公因子(无)
消除左递归(仅有 L→L,S|S 这一处立即左递归)
S→(L)|a
L→SL′
L′→,SL′|ϵ计算First和Follow
First(S) = { ( , a }
First(L) = { ( , a }
First(L') = { ,, ε }
Follow(S) = { $ , ,, ) }
Follow(L) = { ) }
Follow(L')= { ) }
最终得到预测分析表:
非终结符号 | 输入符号 | ||||
---|---|---|---|---|---|
( | ) | , | a | $ | |
S | S→(L) | S→a | |||
S | L→SL′ | L→SL′ | |||
L’ | L′→ϵ | L′→,SL′ |
4.4.2
提取左公因子
S→SSA|a
A→+|∗消除左递归
i = 1
S -> aB
B -> SAB | ε
A -> + | *
i = 2
j = 1
S -> aB
B -> aBAB | ε
A -> + | *
- 预测分析表
非终结符号 | 输入符号 | |||
---|---|---|---|---|
+ | * | a | $ | |
S | S -> aB | |||
A | A -> + | A -> * | ||
B | B -> ε | B -> ε | B -> aBAB | B -> ε |
4.4.3
- First(S)={a}
- (Follow(S) = {a, +, *, $} )
4.4.5
- 对于这个带回溯的递归下降分析器,
它每一次发现错误后回溯所消去的a的数量为2,4,8…..
即 2n ,那么只有在a的个数为 {a2n|n≥1} 时,
假设为k,则他的预测a的个数为 2k−2i,i=1,2,3... ,
当i等于k-1时匹配成功。
而对于六来说,只有3才能匹配,但是他不会经历这个情况。 - 他识别 {a2n|n≥1} 的情况
4.5.2
S -> SS+ -> Sa+ -> SS*a+ ->Sa*a+ -> SS+a*a+
因此句柄为SS+