私は以下を解析する文法を作成しようとしています:
reference: java.util.String
でも同様に
reference: {java.util.String, java.lang.Integer}
つまり、修飾名のリストと1つのアイテム(この場合は「{」でマークされていない)の両方を解析する必要があります。
私が試したのはこれです:
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName);
ただし、最初の形式の参照({なし)を使用すると、「java」に「{」がないというエラーが発生します。私が何を試すべきか提案はありますか?
編集:また試した
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName);
しかし、入力'!'で実行可能な代替手段はありません。文法定義のエラー。
EDIT2:「カンマ区切りリスト」に問題はありません。これを個別に試しましたが、うまく機能します。私の唯一の問題は、「{」文字に基づいてルールの2つの部分を区別することです。