我正在研究龙书,迫不及待地想写一个表达式解析器。
为了处理负数输入,我的词法分析器在满足符号' - '时读取数字以返回数字标记。
“ - 4 + 2” 得到(-4,数字)(+,运算符)(2,数字)
然后我发现它不能像“4-2”那样简单,因为
(4,数字)( - 2,数字) 这是一种错误的语法。
我的一个解决方案是在评估表达式之前进行一些预处理,例如如果第一个标记是减号则附加零。 我想知道你们是如何处理这种情况的?
感谢。
答案 0 :(得分:3)
您应该具有以下语法,但不能将"-" number
转换为令牌。
number := DIGIT+
unary := number
unary := "-" unary
expr := expr "+" unary
expr := expr "-" unary
...
由于存在一元表达式,因此它不是运算符优先级语法。您应该使用更复杂的解析器来解析它。
答案 1 :(得分:2)
我的词法分析器在满足符号' - '时读取数字以返回负数
别。一元运算符应该由解析器处理,而不是词法分析器。
我的一个解决方案是在评估表达式之前进行一些预处理,例如如果第一个标记为减号则附加零。
没有。修复问题。
当你在一个洞里时,不要再挖了。