我正在尝试为布尔运算符NAND构造CFG .. 这就是我到目前为止所做的:
boolexp --> boolexp NAND boolexp
boolexp --> (boolexp)
boolexp --> True | False
问题是当输入类似于“虚假NAND虚假NAND(True NAND True)”时
这显然是模棱两可的,因为根据推导,可以有2个不同的解析树。
如何消除这种歧义并重新设计我的CFG?
我希望NAND运算符是左关联的.. 也就是说,如果输入是A n和B n和C,我希望它是(A n和B)n和C
答案 0 :(得分:2)
您可以执行以下操作
boolexp --> boolexp NAND boolterm
boolexp --> boolterm
boolterm --> (boolexp)
boolterm --> True | False
如果是a NAND b NAND c
,您将获得唯一的推导
boolexp(a NAND b) NAND boolterm(c)