【问题标题】:BNF Grammar AmbiguityBNF 语法歧义
【发布时间】:2012-02-12 00:07:34
【问题描述】:

我最近在想下面的BNF

A -> x | yA | yAzA

where x,y,z are terminals.

我很确定这个语法是模棱两可的,但是如何使它明确呢?

【问题讨论】:

    标签: grammar bnf


    【解决方案1】:

    如果一个特定的字符串可以有不止一个解析树,那么一个文法就是模棱两可的。在您的语言中,字符串 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。我建议您查看该页面,了解如何解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多