首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析算术表达式

解析算术表达式
EN

Stack Overflow用户
提问于 2013-05-05 23:49:14
回答 2查看 720关注 0票数 1

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

为了处理负数输入,我的lexer在遇到符号'-‘时读取数字,以返回一个数字标记。

"-4+2“将得到(-4,数字) (+,运算符) (2,数字)

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

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

我的一种解决方案是在计算表达式之前进行一些预处理,例如,如果第一个标记是减号,则附加一个零。我想知道你们是怎么处理这种情况的?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-06 06:27:56

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

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

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

不是的。解决问题。

当你在一个洞里的时候,不要再挖了。

票数 2
EN

Stack Overflow用户

发布于 2013-05-06 07:03:06

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

代码语言:javascript
复制
number := DIGIT+

unary := number
unary := "-" unary

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

由于存在一元表达式,因此它不是运算符优先语法。你应该用一个更复杂的解析器来解析它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16386268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档