我最近想到了以下BNF
A -> x | yA | yAzA
where x,y,z are terminals.
我很确定这个语法含糊不清,但是如何才能使它明确无误?
答案 0 :(得分:6)
如果特定字符串可以包含多个解析树,则语法不明确。在您的语言中,字符串yyxzx
可以包含以下两个解析树:
A A
/ \ /|\`\
y A y A z A
/|\`\ / \ \
y A z A y A x
| | |
x x x
因此语法含糊不清。
这实际上相当于C语言中臭名昭着的“if / then / else”歧义,y=if
,z=else
和x=statement
。 http://en.wikipedia.org/wiki/Dangling_else。我建议您查看该页面,了解如何解决此问题。