这周我要考试。布尔语句有以下语法:
B -> B and B | not B | (B) | id
B
是一个非端子,端子有:and
,not
,(
,)
,id
这种语法是模棱两可的。我需要重新编写它,并创建一个等效的语法,该语法不是模棱两可的,并且没有左递归,因此not
具有较高的优先级,“和”与左侧相关。
我尝试自己做:我的开始是:
B -> not B' | ( B' | id B'
但是我认为这是错误的,而且我很长时间都处于困境。
使用更多的非终结符可以在所有运算符上设置优先级(我希望我得到正确使用的符号)。
这是为了获得与的从右到左的关联性:id和id,并且id被解析为id和[id和id]
B -> NotExpr | NotExpr and B
NotExpr -> PrimaryExpr | not NotExpr
PrimaryExpr -> id | (B)
这是为了获得从左到右的关联性:id和id和id被解析为[id和id]和id
B -> NotExpr | B and NotExpr
NotExpr -> PrimaryExpr | not NotExpr
PrimaryExpr -> id | (B)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句