这是一个创建于 4157 天前的主题,其中的信息可能已经有所发展或是发生改变。
比如我现在有如下形式的字符串,
var formula_str = "((8>10)&&(8<20))||(8==-1)";
我应该如何正确解析?如果使用eval(),是可以马上输出false。但我需要解析的过程…
按步骤来说,应该是
1. 把表达式内的操作符和操作数 token 化
2. 基于操作符优先级,进出栈
3. 出栈计算,然后压入中间计算结果,直到栈空
我现在的问题是,我应该如何正确地 tokenize
有这方法经验的v2er,是否愿意教我一下
1 条回复 • 1970-01-01 08:00:00 +08:00
|
|
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, 应该不会歧义的.
|