繁体   English   中英

解析算术表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM