我最近在考虑下面的BNF
A -> x | yA | yAzA
where x,y,z are terminals.我很确定这个语法是模棱两可的,但是怎样才能使它明确呢?
发布于 2012-02-12 08:21:36
如果特定字符串可以有多个解析树,则语法是不明确的。在您的语言中,字符串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。我建议您查看该页面,了解如何解决此问题。
https://stackoverflow.com/questions/9245215
复制相似问题