重用Java编译器的有效方法&x27;一种新的JVM语言的后端

重用Java编译器的有效方法&x27;一种新的JVM语言的后端,java,compiler-construction,programming-languages,Java,Compiler Construction,Programming Languages,我正在编写一种针对JVM的语言,目前我正在将 一起编译。从逻辑上讲,我的新语言 在创建字节码方面有许多与Java相同的需求。只是 举几个例子: 找出点分隔的标识符序列指的是什么:a.b.c 参见局部变量a、字段a、类别a或类别a.b 转换算术运算的基元类型:对于intVar*doubleVar, intVar必须转换为双精度 找到一组参数的匹配方法:使用适当的继承和 与上面相同的原始铸造 与此相关的一点是,自动装箱 泛型类型检查,例如,是否List冒着有点迟钝的风险,我的答案是Scala Sc

我正在编写一种针对JVM的语言,目前我正在将 一起编译。从逻辑上讲,我的新语言 在创建字节码方面有许多与Java相同的需求。只是 举几个例子:

  • 找出点分隔的标识符序列指的是什么:a.b.c 参见局部变量a、字段a、类别a或类别a.b
  • 转换算术运算的基元类型:对于intVar*doubleVar, intVar必须转换为双精度
  • 找到一组参数的匹配方法:使用适当的继承和 与上面相同的原始铸造
  • 与此相关的一点是,自动装箱

  • 泛型类型检查,例如,是否
    List冒着有点迟钝的风险,我的答案是Scala

    Scala是一种基于JVM的语言,在最新版本中,它具有。宏(当它们比与C相关联的宏更强大时)是一种在现有语言之上构建领域特定语言的技术,而不必从头开始。宏系统允许您用现有的语言编写代码,并通过新的构造进行增强,然后将新的构造编译成基础语言


    如果您想直接从Java构建,可能值得考虑,但是JSE并没有被广泛使用,而且可能相当粗糙。(事实上,可能还有更成熟的Java宏系统我还没有听说过。)

    以下是我在阅读学术论文时听说的两个可扩展编译器后端:

    对于特定领域的语言工程,我建议

    • 例如,Java的一个变体

    这些项目似乎已经成熟。我从来没有仔细看过他们,但我真的很想;)

    谢谢你的意见!我已经使用Scala好几次了,但这不是我想要的。学术上,对我来说,仅仅想尝试另一种方式就足够了。从技术上讲,我认为Scala有一些功能是我无法获得的,例如闭包从封闭方法访问局部变量。我会调查JSE并尝试一下!我想这正是我想要的。他们的语法不是基于ANTLR的,我想这也没什么帮助。这将让我一窥在这个过程中LL与LR的解析。