当前位置:  开发笔记 > 编程语言 > 正文

用于简单表达的Javascript解析器

如何解决《用于简单表达的Javascript解析器》经验,为你挑选了1个好方法。

我想找到一个可以处理和评估简单表达式的javascript解析器.解析器应该能够评估常规数学表达式,并支持带参数的自定义函数.它还必须支持字符串处理.字符串连接|| 操作员支持是首选,但是如果+可以做到这一点也没关系.

应由解析器处理的表达式示例:

3*(2 + 1) - 1

2*func(2,2)

func('hello world',0,5)|| '你'

有没有人实现这样的事情或在哪里可以找到类似的东西?



1> Matthew Crum..:

我有一个ActionScript解析器的修改版本(用AS编写,而不是解析AS),它支持自定义函数,但不支持字符串.虽然添加字符串支持可能很容易.我会把它上传到某个地方,这样你就可以得到它http://silentmatt.com/parser2.js http://silentmatt.com/parser3.js.

编辑:我很容易添加对字符串的基本支持.它不支持转义序列,并且toJSFunction不起作用,但它只需要几分钟才能使它工作.将连接运算符更改为"||" 应该也很容易.

以下是评估示例表达式的方法:

js> var parser = new Parser();
js> parser.parse("3 * (2 + 1) - 1").evaluate();
8
js> parser.parse("2 * func(2; 2)").evaluate({ func:Math.pow });
8
js> function substr(s, start, end) { return s.substring(start, end); }
js> parser.parse("func('hello world'; 0; 5) + ' you'").evaluate({ func:substr });
hello you

我不记得为什么我用分号作为参数分隔符; 我认为它与区分功能和内置"操作员"功能有关.

另一个编辑:

我一直在玩这个,现在有一个版本更好的字符串支持http://silentmatt.com/parser3.js(toJSFunction工作,你可以使用标准的JavaScript转义序列).它还使用逗号分隔所有函数的参数,并||使用字符串连接运算符代替+,仅添加.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有