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