繁体   English   中英

LR(0)解析器的运算符优先级

[英]Operator precedence with LR(0) parser

定义算术运算的典型BNF:

E :- E + T
  |  T
T :- T * F
  |  F
F :- ( E )
  | number

有什么方法可以重写此语法,以便可以使用LR(0)解析器实现该语法,同时仍保留运算符的优先级和左关联性吗? 我认为通过引入某种消除歧义的非终结符应该有可能,但是我不知道该怎么做。

谢谢!

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

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

S→E;

E→E + T | Ť

T→T * F | F

F→数字| (E)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM