我正在寻找一种在解析过程中避免评论的方法。这是我的问题。
首先,我从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。如何在提取时不包含注释,或者如何在解析期间忽略注释?
我是新手并且在学习,所以请原谅我的无知。
感谢任何帮助。
罗布
答案 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;