我正在使用createM3FromDirectory加载的Java M3模型编写一些分析规则。如果Java代码包含语法错误,我希望中止并不运行我的分析,因为这样可能会使模型处于不一致的状态。
即使对于好的项目,M3.message通常也包含很多错误,因为像junit这样的项目依赖关系,而createM3FromDirectory不能考虑到这一点。这些错误是好的,我的分析无论如何都是有效的。
如何可靠地识别Rascal在加载模型时是否遇到语法错误?
目前,我使用下面的helper函数。
set[Message] syntaxErrors(M3 model) =
{ e
| e:error(msg, _) <- model.messages
, /^syntax error/i := msg
};这是一个可靠的方法吗?
发布于 2019-11-29 18:07:42
是的,这是足够可靠的。
另外,模式匹配可以任意嵌套,如下所示:
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
https://stackoverflow.com/questions/59102263
复制相似问题