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に変更するため、オブジェクトに問題が発生します。