解析算术表达式

时间:2013-05-05 15:49:14

标签: parsing compiler-construction expression

我正在研究龙书,迫不及待地想写一个表达式解析器。

为了处理负数输入,我的词法分析器在满足符号' - '时读取数字以返回数字标记。

“ - 4 + 2” 得到(-4,数字)(+,运算符)(2,数字)

然后我发现它不能像“4-2”那样简单,因为

(4,数字)( - 2,数字) 这是一种错误的语法。

我的一个解决方案是在评估表达式之前进行一些预处理,例如如果第一个标记是减号则附加零。 我想知道你们是如何处理这种情况的?

感谢。

2 个答案:

答案 0 :(得分:3)

您应该具有以下语法,但不能将"-" number转换为令牌。

number := DIGIT+

unary := number
unary := "-" unary

expr := expr "+" unary
expr := expr "-" unary
...

由于存在一元表达式,因此它不是运算符优先级语法。您应该使用更复杂的解析器来解析它。

答案 1 :(得分:2)

  

我的词法分析器在满足符号' - '时读取数字以返回负数

别。一元运算符应该由解析器处理,而不是词法分析器。

  

我的一个解决方案是在评估表达式之前进行一些预处理,例如如果第一个标记为减号则附加零。

没有。修复问题。

当你在一个洞里时,不要再挖了。