我想知道一个字段,如果它与某个字符串不匹配:
情况1:如果上一个节点不是*_pcm.h
,则l1
给出文件l2
的路径。
情况2:当没有l1
或情况1
不为真时,则l
是我所需要的
visit(sec) {
// case 1
case \sources(_, "_SOURCES", [*_, l1:\sourceList(_, _, _, p:/_pcm.h/i, _, _),
l2:\sourceList(_, _, _, n:/_pcm.c/i, _, _), *_]): {
name = determinePath(p, n, f);
}
// case 2
case \sources(_, "_SOURCES", [*_, l:\sourceList(_, _, _, n:/_pcm.c/i, _, _) , *_]): {
path = getPath(f);
}
}
代替p:/_pcm.h/i
我尝试了p:!/_pcm.h/i
,但这不起作用
您不能在模式内直接表达这种否定,但是这是通过在案例中添加when
条件的解决方法:
data D = d1(str s) | d2(int n);
D transform(D subject){
return visit(subject){
case d1(str s) => d1(s + s) when /abc/ !:= s
}
}
希望这可以解决您的问题。