【发布时间】:2014-02-04 01:17:21
【问题描述】:
作为一个自我项目,我正在为我“编造”的一种编程语言创建一个解释器(它实际上只是 JavaScript 编程语言的一个微小扩展),但我对解释器的真正工作原理有点迷茫我应该如何执行用我的语言编写的程序。我的问题是:
1:因为这是一个解释器,我应该在遍历分析树时执行语句,还是应该用不同的语言生成代码——比如 python——然后使用子进程调用来编译和运行它生成python文件?
2:我是否应该在阅读时执行每条语句?还是应该在遍历树并生成/执行代码之前在内存中构建整个程序的解析树-> AST? (取决于问题1的答案是什么)
【问题讨论】:
-
查看我的 SO 答案,展示如何执行构造的 AST:stackoverflow.com/a/10555114/120163
-
我发誓,您是 SO 上最有帮助的用户。
-
@kjh,JavaScript 太甜了,无法由临时 AST walker 轻松评估。值得先将其降低为一些更简单的语言,或者更好的是,转换为扁平字节码,然后由一个简单的解释器执行。
-
@SK-logic,这意味着什么?你的意思是我应该在我的解释器实现中省略该语言的某些特性吗?
-
@kjh,不,我的意思是您可以先将源语言编译或翻译成更简单的语言,然后再进行解释。您可以删除语法糖,将多个结构化编程语句简化为一个简单的通用语句(例如,
goto),在可能的情况下枚举变量而不是使用它们的符号名称等。
标签: compiler-construction programming-languages code-generation interpreter