私は少しのクエリ言語のためにANTLR文法を書こうとしています。その上、B、およびFIELD2一致し、私の開始ルールのためのキャッチオール2番目の代替
Cフィールド1が一致するエンティティのリストを返すことになっています:
フィールド1:フィールド2:Bのフィールド3クエリは、特定の分野に限定した検索用語のリストです。クエリはまた、完全に無制限にすることができます:ABCと一致する任意のフィールドとエンティティを返すことになっています
ABC
。ここではANTLR文法です:
@members {
String unrestrictedQuery;
}
FIELD1_OPERATOR: 'field1:';
FIELD2_OPERATOR: 'field2:';
FIELD3_OPERATOR: 'field3:';
DIGIT: '0'..'9';
LETTER: 'A'..'Z' | 'a'..'z';
query: subquery (' ' subquery)*
| UNRESTRICTED_QUERY=.* {unrestrictedQuery = $UNRESTRICTED_QUERY.text;}
;
私は無制限のクエリは、クエリルールの最初の選択肢と一致しない任意のテキストになりたいです。
1)2番目の選択肢がマッチしたテキストを取得するには、より良い方法がありますか?
2)これをWebサーバーに接続すると、unrestrictedQueryパーサーフィールドがクエリの最後の文字に解決されます。私は実際に文字列全体が必要なときに、クエリのすべての文字に対してアクションが呼び出されるようです。読書のための
ありがとう!
'*' 'UNRESTRICTED_QUERYに= *'トークンの任意の量に一致します。。。それは文字の任意の量に一致*しません!大きな違い。 –
あなたは絶対に正しいです。ありがとうございました。 –