语法如下:
bexpr -> bexpr or bterm | bterm
bterm -> bterm and bfactor | bfactor
bfactor -> not bfactor | ( bexpr ) | true | false
我已经删除了左递归
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, ε]
我认为下面的 bterm 和 bfactor 是
follow(bterm)=first(bexpr')\epsilon+follow(bexpr)=[or]+[$,)]=[or,$,)]
follow(bfactor)=first(bterm')\epsilon+follow(bterm)=[and]+[or,$,)]=[and, or, $, )]
但是参考答案说
follow(bterm) = [or, $]
follow(bfactor) = [and, $]
为什么我错了?