0

我正在尝试为命题逻辑编写语法,以创建 LL 解析器(词法分析)。

我尝试了以下语法:

F = F and F
F = F or F 
F = F => F
F = F <=> F
F = not F
F = (F)
D = a

但我发现它是模棱两可的。我尝试了以下方法来消除歧义:

F = F and A
F = A
A = F or B 
A = B
B = F => C
B = C
C = F <=> C
C=D
D = not F
D = (F)
D = a

这个语法正确吗?我成功地消除了歧义吗?

4

1 回答 1

0

语法仍然模棱两可。下面是 not a 和 a 的两个推导:

推导1:

F   
F and A
A and A
B and B
C and C
not F and a
not A and a
not B and a
not C and a
not D and a
not a and a

推导2:

F    
A
B
C
D
not F
not F and A
not A and A
not B and B
not C and C
not D and D
not a and a

您需要在推导周围加上括号,例如 F = (F and A)

如果您不想使用括号,另一种可能性是使用前缀表示法

于 2016-11-01T00:56:40.833 回答