BNF语法模糊

时间:2012-02-12 00:07:34

标签: grammar bnf

我最近想到了以下BNF

A -> x | yA | yAzA

where x,y,z are terminals.

我很确定这个语法含糊不清,但是如何才能使它明确无误?

1 个答案:

答案 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=ifz=elsex=statementhttp://en.wikipedia.org/wiki/Dangling_else。我建议您查看该页面,了解如何解决此问题。