Parsing 没有注释的流氓获取方法
我正在寻找一种在解析过程中避免注释的方法。这是我的问题 首先,我从M3模型中获取所有方法,如下所示:Parsing 没有注释的流氓获取方法,parsing,comments,rascal,Parsing,Comments,Rascal,我正在寻找一种在解析过程中避免注释的方法。这是我的问题 首先,我从M3模型中获取所有方法,如下所示: public set[loc] getMethodLocations(M3 model){ locations = { <x,y> | <x,y> <- model@containment, x.scheme=="java+class", y.scheme=="java+method" || y.scheme=="java+constructor"
public set[loc] getMethodLocations(M3 model){
locations = { <x,y> | <x,y> <- model@containment,
x.scheme=="java+class",
y.scheme=="java+method" ||
y.scheme=="java+constructor" };
set[loc] methodLocations = { a | a <- range(locations) };
return methodLocations;
}
set[loc] AllMethodsAsLoc = getMethodLocations(model);
for( methodAsLoc <- AllMethodsAsLoc ) {
MethodDec m = parse(#MethodDec, methodAsLoc);
};
public set[loc]getMethodLocations(M3型号){
locations={|这是一个很好的问题。因为MethodDec
不是一个“开始”的非终结符,它不接受实际MethodDec
前后的空格或注释。因此,要么我们应该以某种方式删除空格,要么我们可以制作一个新的非终结符,它可以接受布局
后一种解决方案是更好的IMHO:
start syntax MyTop = MethodDec method;
start[MyTop] theTop = parse(start[MyTop], methodAsLoc);
MyTop t = theTop.top
MethodDec dec = t.method;
// or more directly
dec = parse(start[MyTop], methodAsLoc).top.method;
谢谢jurgnv。这正是我需要的解决方案。太好了。对于以后阅读或使用此解决方案的人来说。请记住,此解决方案仅适用于方法。代码示例还获取构造函数,因此我还需要添加以下内容以处理构造函数:syntax MyMethod=MethodDec | ConstrDec;'通过@jurgenv解决此问题:
start syntax MyTop=MyMethod方法;`声明变量并将其用于解析,如:MyMethod m=parse(#start[MyTop],method).top.method;