M3:如何识别 Java 个项目中的语法错误

M3: how to identify syntax errors in Java projects

我正在使用加载了 createM3FromDirectory 的 Java M3 模型编写一些分析规则。如果 Java 代码包含语法错误,我想中止而不是 运行 我的分析,因为那样模型可能处于不一致状态。

M3.messages 即使是好的项目,通常也会包含很多错误,因为像 junit 这样的项目依赖性,createM3FromDirectory 无法考虑。这些错误都很好,反正我的分析是有效的。

如何可靠地识别 Rascal 在加载模型时是否遇到语法错误?

目前我正在使用以下辅助函数。

set[Message] syntaxErrors(M3 model) =
  { e
  | e:error(msg, _) <- model.messages
  , /^syntax error/i := msg
  };

这种方法靠谱吗?

是的,恕我直言,这足够可靠。

顺便说一句,模式匹配可以任意嵌套,像这样:

set[Message] syntaxErrors(M3 model) =
  { e | e:error(/^syntax error/i, _) <- model.messages}

另外,您还可以将类路径传递给 createM3FromDirectory,以确保正确解析 JUnit 依赖项(以及其他依赖项)。如果你需要为一个maven项目构建这样一个类路径,你可能想尝试:https://github.com/cwi-swat/rascal-java-build-manager