path[Scope sc] returns [Path p]
@init{
List<String> parts = new ArrayList<String>();
}
: ^(PATH (id=IDENT{parts.add($id.text);})+ pathIndex? )
{// ACTION CODE
// need to check if pathIndex has executed before running this code.
if ($pathIndex.index >=0 ){
p = new Path($sc, parts, $pathIndex.index);
}else if($pathIndex.pathKey != ""){
p = new Path($sc, parts, $pathIndex.pathKey);
}
;
有没有办法检测 pathIndex 是否被执行?在我的操作代码中,我尝试测试 $pathIndex == null,但 ANTLR 不允许您这样做。ANTLRWorks 给出了一个语法错误,上面写着“在规则范围内缺少属性访问:pathIndex。”
我需要这样做的原因是因为在我的操作代码中我这样做:
$pathIndex.index
如果变量 $pathIndex 被转换为 null,则返回 0。当您访问属性时,ANTLR 会生成pathIndex7!=null?pathIndex7.index:0
这会导致对象出现问题,因为它会将我预设为 -1 的值更改为错误标志为 0。