用于JavaScript的基于Java的解释器

时间:2011-07-26 11:12:27

标签: javascript antlr interpreter bytecode

作为学校的一个项目,我必须制作一个JavaScript解释器。 (包括整个后端的一切都必须由我制作)。

所有东西都必须用Java编写 - 我使用ANTLR来解析和生成AST。

目前我可以将一些.js代码解析为AST - 因此需要将此AST转换为可以在字节码机器上执行的som类型的中间表示。

我有一些为静态类型语言编写编译器的经验,但我非常怀疑如何从这里开始,因为JS是一种动态类型语言。

如果你能给我一些关于如何进行的好建议,我将不胜感激!

我个人认为我必须首先制作字节码机,然后让IR适合这台机器。不幸的是,我真的找不到关于如何编写字节码机的好教程。

PS。我熟悉以下有关该主题的书籍:

“Java(Appel)中的现代编译器实现”, “用Java编写语言处理器(Watt& Brown)”, “语言实施模式(Parr)”

关心Sune

1 个答案:

答案 0 :(得分:0)

如果您只想执行javascript,则不需要将AST转换为IR,然后转换为(某些?)字节码,这也会迫使您执行字节码执行。

为什么不在java“引擎”中执行javascript AST?您可以将所有值存储为Map<String, Object>,并在行走AST时对其进行解释。新函数获取环境/上下文(新Map<...>)。

如果在当前上下文中找不到值,则必须回退到全局上下文(= Map)。

对于“动态”行为:如果您需要添加double,则只能使用标准方式将Object.toString()值解析为double(比这更难动态)得到:)):

String value = contextMap.get(key); 
Double dvalue = Double.parseDouble(value.toString());
....