【发布时间】:2019-12-16 12:40:56
【问题描述】:
我正在尝试使用 AST 获取方法声明,因此我可以遍历它,查找某些语句。它以前工作过,但我不能让它工作了,我得到的声明在我看来就像有某种解析错误。我找不到有关如何解决此问题的信息:
{<|java+method:///MetricsTest/testMethod()|,compilationUnit([],[],src=|java+method:///MetricsTest/testMethod()|(0,30,<1,0>,<2,2>),decl=|java+compilationUnit:///MetricsTest/testMethod()|,messages=[error("Syntax error on token \"void\", @ expected",|java+method:///MetricsTest/testMethod()|(7,4,<1,0>,<1,0>)),error("Syntax error, insert \"enum Identifier\" to complete EnumHeader",|java+method:///MetricsTest/testMethod()|(23,1,<1,0>,<1,0>))])>}
我的(部分)代码如下:
public rel[loc, loc] getMethods(M3 model) {
return { <x,y> | <x,y> <- model.containment
, x.scheme=="java+class"
, y.scheme=="java+method" || y.scheme=="java+constructor"
};
}
public rel[loc, Declaration] getMethodLocWithDeclaration(M3 model) {
rel[loc, loc] methods = getMethods(model);
rel[loc, Declaration] methodsWithAST = {};
for(<loc c, loc m> <- methods) {
methodsWithAST += <m, createAstFromFile(m, false)>;
}
return methodsWithAST;
}
有人知道我该如何解决这个问题吗?
【问题讨论】:
标签: rascal