Rascal获取没有注释的方法

时间:2016-12-06 22:34:23

标签: 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" };
  set[loc] methodLocations = { a | a <- range(locations) };
  return methodLocations;
}

然后我想迭代所提取的位置,如下所示:

set[loc] AllMethodsAsLoc = getMethodLocations(model);

for( methodAsLoc <- AllMethodsAsLoc ) {
  MethodDec m = parse(#MethodDec, methodAsLoc);
};

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

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

感谢任何帮助。

罗布

1 个答案:

答案 0 :(得分:1)

很好的问题。因为MethodDec不是&#34;开始&#34;非终端,它不接受实际MethodDec之前和之后的空白或评论。所以要么我们应该以某种方式修剪空白,要么我们可以创建一个新的非终端可以接受布局。

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

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;