运行 来自 REPL 之外的 Rascal 程序

Running a Rascal program from outside the REPL

我真的很希望能够从 REPL 外部 运行 一些 Rascal 的程序(例如,作为脚本的一部分,或从另一个程序调用)。我使用 Rascal 的目的是在一个更大的框架中进行中间阶段,所以我想知道从另一个程序集成执行 Rascal 代码的最佳方法是什么。

现在最好的方法是将您的代码与 Rascal shell 可执行 jar 打包在一起。调用 Rascal 代码有一个方便的方法 class JavaToRascal。有时需要一些思考才能使用 IRascalSearchPathContributors 将您自己的模块添加到 Rascal 搜索路径,但是如果您包含一个具有正确属性的 RASCAL.MF 文件,它应该会自动进行。

如果您正在考虑 Eclipse 插件,那么最好的方法是让您的插件依赖于 rascal-eclipse 插件并使用 ProjectEvaluatorFactory 访问解释器。

警告:由于我们正在转向编译系统,您为这种集成编写的代码将会改变。这就是我们尚未记录 API 从 Java 调用 Rascal 的原因。

当我在思考同样的问题时,这是我想出的(也许微不足道的)答案:

java -jar /path/to/rascal-shell-stable.jar path/to/myProgram.rsc

你要知道Rascal是从当前目录计算模块名称的(不知道它是否支持类似Java的CLASS_PATH),所以在上面的例子中myProgram.rsc 应该有一个 module path::to::myProgram 的模块声明。计算和声明的模块名称必须匹配。