1

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

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

问题是哪个更快或更清洁,之前生成 JS 代码然后只运行它还是生成 AST 并在运行时对其进行迭代?

4

1 回答 1

1

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

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

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

于 2012-11-27T03:03:15.150 回答