1

ANTLR には簡単なルールがあります。

title returns [ElementVector<Element> v]
@init{

    $v = new ElementVector<Element>() ;

}
    :   '[]'    
    |   '[' title_args {$v.add($title_args.ele);} (',' title_args {$v = $title_args.ele ;})* ']' 
    ;

title_args は次のとおりです。

title_args returns [Element ele]
    :   author {$ele = new Element("author", $author.text); }
    |   location {$ele = new Element("location", $location.text); }
    ;

コンパイルしようとすると、タイトル ルールで 127 エラーが発生します。title_args は一意でない参照です。

このWebサイトの別の同様の質問( ANTLRでリストの戻り値を処理する方法)に与えられた解決策に従いましたが、字句ルールでのみ機能するようです。

それを回避する特定の方法はありますか?

ありがとう、クリストス

4

3 に答える 3

3

式に 2 つの title_args があるため、エイリアスを設定する必要があります。これを試して:

|   '[' t1=title_args {$v.add($t1.ele);} (',' t2=title_args {$v = $t2.ele ;})* ']' 

t1 と t2 は任意のエイリアスであり、一致する限り、任意のものを選択できます。

于 2009-08-31T01:57:47.477 に答える
0

ええ、私は同じ問題を抱えていました。変数名の 1 つを変更する必要があります。たとえば、次のようにします。

title_args
title_args1

title_args を 2 回使用する代わりに、コードで。

title_args がパーサー ルールの場合は、同じルールを title_args1 という名前で作成します。したがって、基本的に同じ機能を持つ 2 つのルールが存在します。

于 2011-10-18T00:48:58.463 に答える
0

title_args問題はvarを再利用していると思います。これらの変数名のいずれかを変更してみてください。

于 2009-08-11T10:32:08.967 に答える