无注释的流氓获取方法

Rascal fetch methods without comments

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

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

我的问题是,当获取的方法在该位置有注释时,解析似乎失败并出现 ParseError。如何在获取时不包含注释或在解析期间如何忽略注释?

我是新手,正在学习,所以请原谅我的无知。

感谢任何帮助。

罗布

问得好。因为 MethodDec 不是 "start" 非终结符,所以它不接受实际 MethodDec 前后的空格或注释。所以要么我们应该 trim 以某种方式关闭空白,要么我们可以创建一个新的非终端 可以 接受布局。

后一种解决方案更好恕我直言:

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;