首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符优先于LR(0)解析器

运算符优先于LR(0)解析器
EN

Stack Overflow用户
提问于 2015-11-21 20:03:49
回答 1查看 431关注 0票数 1

定义算术操作的典型BNF:

代码语言:javascript
复制
E :- E + T
  |  T
T :- T * F
  |  F
F :- ( E )
  | number

有没有办法重写这个语法,这样它就可以用LR(0)解析器实现,同时仍然保留运算符的优先级和左结合性?我认为引入某种消除歧义的非终端机应该是可能的,但我不知道如何去做。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 16:43:49

语言只有在没有前缀的情况下才能有LR(0)语法,这意味着语言中没有字符串是另一种语言的前缀。在这种情况下,您所描述的语言并不是无前缀的。例如,字符串number + numbernumber + number + number的前缀。

解决这一问题的一个常见方法是“结束”您的语言,方法是要求生成的所有字符串以一个特殊的“完成”字符结尾。例如,可以要求所有生成的字符串以分号结尾。如果这样做,您可以使用以下语法为该语言构建一个LR(0)解析器:

S→E; E→E+T_→ T→T*F*F F→数x (E)

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

https://stackoverflow.com/questions/33848016

复制
相关文章

相似问题

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