无注释的流氓获取方法
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;
我正在寻找一种在解析过程中避免注释的方法。这是我的问题。
首先,我从 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;