Parsing 没有注释的流氓获取方法

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"

我正在寻找一种在解析过程中避免注释的方法。这是我的问题

首先,我从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" };
  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;