我正在学习龙书,迫不及待地想写一个表达式解析器。
为了处理负数输入,我的lexer在遇到符号'-‘时读取数字,以返回一个数字标记。
"-4+2“将得到(-4,数字) (+,运算符) (2,数字)
但是后来我发现它不能像"4-2“那样简单,因为
(4,number) (-2,number)语法错误。
我的一种解决方案是在计算表达式之前进行一些预处理,例如,如果第一个标记是减号,则附加一个零。我想知道你们是怎么处理这种情况的?
谢谢。
发布于 2013-05-06 06:27:56
我的词法分析器在遇到符号'-‘时读取数字以返回负数
不要,一元运算符应该由解析器处理,而不是词法分析器。
我的一个解决方案是在计算表达式之前做一些预处理,例如,如果第一个标记是减号,则附加一个零。
不是的。解决问题。
当你在一个洞里的时候,不要再挖了。
发布于 2013-05-06 07:03:06
您应该具有以下语法,但不能将"-" number转换为令牌。
number := DIGIT+
unary := number
unary := "-" unary
expr := expr "+" unary
expr := expr "-" unary
...由于存在一元表达式,因此它不是运算符优先语法。你应该用一个更复杂的解析器来解析它。
https://stackoverflow.com/questions/16386268
复制相似问题