我正在编写一种针对 JVM 的语言,我目前正在将编译器放在一起。对我来说很明显,从逻辑上讲,在创建字节码方面,我的新语言与 Java 有许多相同的需求。仅举几个例子:
- 找出以点分隔的标识符序列指的是什么:abc 可以指局部变量 a、字段 a、类 a 或类 ab
- 转换算术运算的原始类型:对于 intVar*doubleVar,必须将 intVar 强制转换为 double
- 找到一组参数的匹配方法:具有正确的继承和与上面相同的原始转换
- 在相关说明中,自动装箱
- 泛型类型检查,例如是否
List<X<? super Y>> l = new List<X<Z>>();
兼容
可能还有更多,而且我不知何故不想重新发明这些轮子(制作一门新语言,当然我已经在重新发明一些轮子了......),所以我想知道重用的最佳方法是什么(部分) 一个现有的 Java 编译器,将其传递给它需要弄清楚上述内容的 AST 片段。
我确实已经有了词法分析器和解析器(ANTLR),所以我真的在寻找关于那里有哪些编译器的建议,这样我就可以相对容易地使用它们(例如,我对 ECJ 进行了一些研究,但是如果有人告诉我它不能满足我的要求,或者另一个编译器会更容易使用,那就太好了)。
总结一个明确的问题:哪些 Java 编译器具有易于访问的后端,适合与非 Java JVM 语言的前端一起使用?