修改 Java 语法

Modifying Java syntax

我希望使用 m3 库中提供的 Rascal 现有 Java AST,但我想扩展它以添加一些功能。我们正在使用类似 Java 的语言(大约 95% Java 和 5% 我们的特定功能)。理想情况下,我希望能够采用 Java 语法和 AST 代码(分别为 src/org/rascalmpl/library/lang/java/syntax/Java15.rscsrc/org/rascalmpl/library/lang/java/m3/AST.rsc)稍微修改语法并添加一些新的 AST 节点。仔细研究并探索这一切的工作原理表明,这一切与我发现的其他语言示例的工作方式不同。

例如,Java15.rsc 中的构造函数与 AST.rsc 中的构造函数不匹配,这就是所有其他语言示例的工作方式。我目前对这一切如何工作的理解是,当用户调用 createAstFromFile() 时,实际发生的是 Rascal 调用一些 Java 代码生成 AST。

我尝试了很多事情,最成功的是开始重命名 Java15.rsc 中的构造函数以匹配 AST.rsc 中的构造函数,但在我意识到这一点之前并没有做得太远将是一项艰巨的任务,也许不是解决此问题的最佳方法。

有什么办法可以"easily"在这里提取语法和 AST 部分并自行修改吗?

谢谢。

M3(及其 AST)与 Java15 语法断开连接。它使用 eclipse JDT 进行解析和名称绑定。如果您想扩展 AST,可以向 ADT 添加新的构造函数。

data Expression = delayedCall(Expression receiver, str name, list[Expression] arguments);

为表达式 ADT 添加一个新的替代项。

但是,我们没有用于 AST 的 java 打印机,因此根据您想要执行的操作,您实际上可能需要适合您的语言的语法并使用解析树。您可以用与 ADT 类似的方式扩展语法。