javascript - 生成 AST 并对其进行迭代还是生成代码,哪个更快、更干净?

标签 javascript parsing code-generation interpreter abstract-syntax-tree

我使用 jison 用 Ja​​vaScript 为一种小语言编写了一个解释器,这是 bison 的 JS 端口。该语言用于评估表达式和条件。现在评估与解析混合在一起。

我正在尝试优化它,瓶颈是词法分析器和解析器。所以我决定提前解析它并仅在运行时进行评估。

问题是,先生成 JS 代码并仅运行它,还是生成 AST 并在运行时对其进行迭代,哪一个更快或更干净?

最佳答案

一般来说*,生成最接近机器代码的任何内容总是更快。在你的情况下,生成 javascript 会更快。

生成的 javascript 代码将由底层 C/C++ 解释器直接执行(在某些情况下将 JIT 编译为机器代码)。相比之下,用 javascript 编写自己的 VM 来执行 AST 将在 VM 的附加层 - javascript 上运行。

*注意:在某些极端情况下,解释器有时可以像 native 代码一样快速执行。第四个例子是因为它的解释器非常简单 - 它只是一个函数指针表。

关于javascript - 生成 AST 并对其进行迭代还是生成代码,哪个更快、更干净?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576405/

相关文章:

php - 使用 PHP 手动解析原始多部分/表单数据数据

javascript - 如何在 d3/crossfilter/dcjs 或图表中处理季度?

javascript - "this"单击时更改值

javascript - 由于 socket.io 无法构建 JMVC 应用程序

java - 控制字符串是否是数学表达式

string - 如何在非双引号的字符串上使用 read ?

javascript - jquery-ui draggable 在 appendchild() 之后不工作

c# - 使用 Roslyn 解析/转换/生成代码 : am I aiming too high, 还是太低?

asp.net-mvc - ABP Suite 似乎正在生成无法编译的代码

java - 如何在多个java类中自动修改代码?