我最近在想下面的BNF
A -> x | yA | yAzA
where x,y,z are terminals.
Run Code Online (Sandbox Code Playgroud)
我很确定这个语法含糊不清,但是如何才能使它明确无误呢?
如果特定字符串可以具有多个解析树,则语法是不明确的.在您的语言中,字符串yyxzx可以包含以下两个解析树:
A A
/ \ /|\`\
y A y A z A
/|\`\ / \ \
y A z A y A x
| | |
x x x
Run Code Online (Sandbox Code Playgroud)
因此语法含糊不清.
这实际上等同于臭名昭著的"如果/那么/其他"歧义C的语言,在这里y=if,z=else和x=statement.http://en.wikipedia.org/wiki/Dangling_else.我建议您查看该页面,了解如何解决此问题.
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |