1

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

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

"-4+2" 将得到 (-4,number) (+,operator) (2,number)

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

(4,number) (-2,number) 语法错误。

我的一个解决方案是在评估表达式之前进行一些预处理,例如如果第一个标记是减号,则附加零。想问问大家遇到这种情况是怎么处理的?

谢谢。

4

2 回答 2

3

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

number := DIGIT+

unary := number
unary := "-" unary

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

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

于 2013-05-05T23:03:06.057 回答
2

我的词法分析器在遇到符号“-”时读取数字以返回负数

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

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

不,解决问题。

当你在一个洞里时,停止挖掘。

于 2013-05-05T22:27:56.187 回答