作为一个自我项目,我正在创建一个编程语言的解释器,我“编造”(它实际上只是JavaScript编程语言的一个小扩展)但我对于解释器的真正工作方式有点迷茫我应该如何执行用我的语言编写的程序。我的问题是:
1:因为这是一个解释器,我应该在执行我的解析树时执行语句,还是应该用不同的语言生成代码 - 比如python - 然后使用子进程调用来编译和运行生成python文件?
2:我想在阅读时执行每个声明吗?或者我应该构建整个程序的解析树 - >在走遍树并生成/执行代码之前,内存中的AST? (取决于问题1的答案)
答案 0 :(得分:1)
实现解释器的一种直观方式是创建可执行的AST:
一种方法是在Java Truffle框架的顶部实现它。如果你以正确的方式实施翻译,你将获得不错的表现。还有几种语言实现可用;还包括使用Cocoa编译器生成器的simple example language。一些论文(1) (2)解释了如何实现局部变量等事物或处理动态类型语言的不同类型的值。
我建议你先看看truffle.sl实现(link how to get it),然后看看你可以从哪里获得。