
eval5 是基于 TypeScript 编写的 Javascript 解释器,100%支持 ES5 语法。
支持浏览器、node.js 、小程序等 Javascript 运行环境。
项目地址:https://github.com/bplok20010/eval5
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
eval5 先将源码编译得到树状结构的抽象语法树(AST)。
抽象语法树由不同的节点组成,每个节点的 type 标识着不同的语句或表达式,例如: 1+1 的抽象语法树
{ "type": "Program", "body": [ { "type": "ExpressionStatement", "expression": { "type": "BinaryExpression", "operator": "+", "left": { "type": "Literal", "value": 1, "raw": "1" }, "right": { "type": "Literal", "value": 1, "raw": "1" } } } ], "sourceType": "script" } 根据节点 type 编写不同的处理模块并得到最终结果。例如:根据 1+1 的语法树我们可以写出一下解释器代码:
function handleBinaryExpression(node) { switch( node.operator ) { case '+': return node.left.value + node.right.value; case '-': return node.left.value - node.right.value; } } 以下是解析 echarts4 效果示例:
1 neilp 2020 年 4 月 19 日 性能测试过吗 |
2 gkiwi 2020 年 4 月 19 日 |
4 gkiwi 2020 年 4 月 19 日 |
6 zhouyg 2020 年 4 月 20 日 为啥不实现可以直接执行 es6 或者 typescript 的代码? |