【发布时间】:2012-08-29 09:37:47
【问题描述】:
是否可以构造一个 LR(0) 解析器来解析具有前缀和后缀运算符的语言?例如,如果我有一个带有 +(加法)和 ! (阶乘)运算符通常优先于 1+3!应该是 1 + 3! = 1 + 6 = 7,但如果解析器是 LR(0),那么当它在堆栈上有 1+3 时,它肯定会减少而不是移位?
另外,右结合运算符会带来问题吗?例如,2^3^4 应该是 2^(3^4) 但同样,当解析器在堆栈上有 2^3 时,它如何知道减少或移位?
如果这不可能,是否还有一种方法可以使用 LR(0) 解析器,可能是通过更改语法在适当的位置添加括号?
【问题讨论】:
-
RE 最后一段:有点蛋疼的问题,因为您需要一个 可以 处理这些构造的解析器(如果 LR(0) 不能)知道表达式的 RPN 形式是什么,或者可以(应该)在不改变含义的情况下插入显式括号。
-
@delnan 好点。虽然,关于括号,如果可能改变语法以将括号放在有用的地方呢?
标签: parsing lexer lr associativity postfix-operator