【发布时间】:2018-06-24 00:15:43
【问题描述】:
我是解释器设计的初学者,在学习了一点语言设计(语法、语言、词法分析器、解析器)之后,我不明白为什么解析器需要构建一个抽象语法树作为它去了。为什么不直接使用递归调用的函数来执行操作呢。
这是我发现的最简单的例子。 https://www.youtube.com/watch?v=N55XNj8KjC4.
【问题讨论】:
-
这并不总是必要的,您可以为某些语言编写编译器而无需编译器,尤其是对于解释性目标。但是,当您想要优化时,您就开始需要一个。
-
重新标题问题:递归下降解析器确实“按原样解析”。您似乎要问的是:为什么它不能执行?
-
事实上,在过去糟糕的日子里,一些编译器确实确实在运行时发出代码(使用智能汇编器或回补分支到尚未生成的机器代码)。此类编译器的机器代码质量普遍较差。
-
你说的例子不是编译器。它是一个表达式求值器。
-
这不仅仅是所谓的“糟糕的过去”。现在有编译器可以做到这一点。 @torek
标签: parsing compiler-construction interpreter