1

私は以下を解析する文法を作成しようとしています:

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つの部分を区別することです。

4

2 に答える 2

9

これはトリックを行います:

Reference:
'reference' ':' (
     '{' values+=QualifiedName (',' values+=QualifiedName)* '}' 
   | values+=QualifiedName
);

グループと代替の優先順位に注意してください。

于 2012-02-16T11:22:56.977 に答える
0

私は Xtext にまったく慣れていないので、試してみてください。

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values=QualifiedName);

また

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName);
于 2012-02-16T10:06:52.157 に答える