请教js解析字符串逻辑运算

2013-05-29 10:56:26 +08:00
 chainchan
比如我现在有如下形式的字符串,
var formula_str = "((8>10)&&(8<20))||(8==-1)";

我应该如何正确解析?如果使用eval(),是可以马上输出false。但我需要解析的过程…
按步骤来说,应该是

1. 把表达式内的操作符和操作数 token 化
2. 基于操作符优先级,进出栈
3. 出栈计算,然后压入中间计算结果,直到栈空

我现在的问题是,我应该如何正确地 tokenize
有这方法经验的v2er,是否愿意教我一下
2600 次点击
所在节点    问与答
1 条回复
Golevka
2013-05-29 12:20:29 +08:00
读取一个字符就能知道应该走那条产生式了. 比如( ) > < - !自己就能构成一个token(op); 看到[.0-9]就继续向下推进抓出一个token(number); 看到& |前瞻一个字符就能抓出token(and)和token(or).
另外负号可以看做一个unary operator (比如token(neg)), 反正逻辑运算也不涉及binary substraction, 应该不会歧义的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70495

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX