如何计算以下几组布尔表达式

问题描述 投票:0回答:0

语法如下:

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, $]

为什么我错了?

compiler-construction
© www.soinside.com 2019 - 2024. All rights reserved.