BNF语法模糊

Mar*_*edy 7 grammar bnf

我最近在想下面的BNF

A -> x | yA | yAzA

where x,y,z are terminals.
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*man 8

如果特定字符串可以具有多个解析树,则语法是不明确的.在您的语言中,字符串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=elsex=statement.http://en.wikipedia.org/wiki/Dangling_else.我建议您查看该页面,了解如何解决此问题.