我正在使用Java M3模型编写一些分析规则,该模型加载了createM3FromDirectory。如果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