我最近在思考以下BNF
A -> x | yA | yAzA
where x,y,z are terminals.
我相信这个语法是有歧义的,但如何使它变得清晰明了?
如果一个特定的字符串可以有多个解析树,则语法是含糊不清的。在您的语言中,字符串yyxzx
可以有以下两个解析树:
A A
/ \ /|\`\
y A y A z A
/|\`\ / \ \
y A z A y A x
| | |
x x x
y=if
,z=else
,x=statement
。http://en.wikipedia.org/wiki/Dangling_else。我建议查看该页面以获取解决此问题的想法。