[英]Operator precedence with LR(0) parser
定义算术运算的典型BNF:
E :- E + T
| T
T :- T * F
| F
F :- ( E )
| number
有什么方法可以重写此语法,以便可以使用LR(0)解析器实现该语法,同时仍保留运算符的优先级和左关联性吗? 我认为通过引入某种消除歧义的非终结符应该有可能,但是我不知道该怎么做。
谢谢!
语言只能有一个LR(0)文法,如果它是无前缀 ,这意味着该语言没有字符串是另一个的前缀。 在这种情况下,您描述的语言不是无前缀的。 例如,字符串number + number
是number + number + number
的前缀。
解决此问题的常用方法是要求所有生成的字符串都以特殊的“完成”字符结尾,从而“标记”您的语言。 例如,您可能要求所有生成的字符串都以分号结尾。 如果这样做,则可以使用以下语法为该语言构建LR(0)解析器:
S→E;
E→E + T | Ť
T→T * F | F
F→数字| (E)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.