[英]Parsing arithmetic expressions
我正在研究《龙书》,迫不及待想要编写一个表达式解析器。
为了处理负数输入,我的词法分析器在遇到符号“-”时会读取数字以返回数字标记。
“ -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
...
由于存在一元表达式,因此它不是运算符优先语法。 您应该使用更复杂的解析器对其进行解析。
我的词法分析器在遇到符号“-”时会读取数字以返回负数
别。 一元运算符应由解析器而不是词法分析器处理。
我的解决方案之一是在评估表达式之前进行一些预处理,例如,如果第一个标记为负号,则添加零。
否。解决问题。
当您陷入困境时,请停止挖掘。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.