首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BNF语法歧义

BNF语法歧义
EN

Stack Overflow用户
提问于 2012-02-12 08:07:34
回答 1查看 5.4K关注 0票数 7

我最近在考虑下面的BNF

代码语言:javascript
复制
A -> x | yA | yAzA

where x,y,z are terminals.

我很确定这个语法是模棱两可的,但是怎样才能使它明确呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-12 08:21:36

如果特定字符串可以有多个解析树,则语法是不明确的。在您的语言中,字符串yyxzx可以包含以下两个解析树中的任意一个:

代码语言:javascript
复制
    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。我建议您查看该页面,了解如何解决此问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9245215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档