编译原理 第三次作业
151220129 计科 吴政亿
4.4.1
无左公因子,消除左递归后得到:
- bexpr → → bterm bexpr’
- bexpr’ → → or bterm bexpr’ | ϵ ϵ
- bterm → → bfactor bterm’
- bterm’ → → and bfactor bterm’ | ϵ ϵ
- bfactor → → not bfactor | (bexpr) | true | false
First(bexpr) = First(bterm) = First(bfactor) = {not,(,true,false}
First(bexpr’) = {or,
ϵ
ϵ
}
First(bterm) = {and,
ϵ
ϵ
}
Follow(bexpr) = Follow(bexpr’) = { ), }
Follow(bterm) = Follow(bterm’) = { or,
} Follow(bterm) = Follow(bterm’) = { or,
}
Follow(bfactor) = { and, $ }
预测分析表:
非终结符号 | 输入符号 | |||||||
---|---|---|---|---|---|---|---|---|
and | or | not | ( | ) | true | false | $ | |
bexpr | bexpr -> bterm bexpr’ | bexpr -> bterm bexpr’ | bexpr -> bterm bexpr’ | bexpr -> bterm bexpr’ | ||||
bexpr’ | bexpr’ -> or bterm bexpr’ | bexpr’ -> ε | bexpr’ -> ε | |||||
bterm | bterm -> bfactor bterm’ | bterm -> bfactor bterm’ | bterm -> bfactor bterm’ | bterm -> bfactor bterm’ | ||||
bterm’ | bterm’ -> and bfactor bterm’ | bterm’ -> ε | bterm’ -> ε | |||||
bfactor | bfactor -> not bfactor | bfactor -> (bexpr) | bfactor -> true | bfactor -> false |
4.4.4
- First(S) = { (, ϵ ϵ }
- FollowS(S) = { ), $ }
4.4.5
- 对于这个带回溯的递归下降分析器,
它每一次发现错误后回溯所消去的a的数量为2,4,8…..
即 2n 2 n ,那么只有在a的个数为 {a2n|n≥1} { a 2 n | n ≥ 1 } 时,
假设为k,则他的预测a的个数为 2k−2i,i=1,2,3... 2 k − 2 i , i = 1 , 2 , 3... ,
当i等于k-1时匹配成功。
而对于六来说,只有3才能匹配,但是他不会经历这个情况。 - 他识别 {a2n|n≥1} { a 2 n | n ≥ 1 } 的情况
4.5.2
S
⇒
⇒
S S +
⇒
⇒
S S S + +
⇒
⇒
S S a + +
⇒
⇒
S S S * a + +
⇒
⇒
S S a * a + +
⇒
⇒
S a a * a + +
⇒
⇒
a a a * a + +