ちょっとしたクエリ言語の ANTLR 文法を書こうとしています。クエリは、特定のフィールドに限定された検索用語のリストです。
フィールド 1:a フィールド 2:b フィールド 3:c
これは、field1 が a に一致し、field2 が b に一致するなどのエンティティのリストを返すことになっています。クエリは完全に無制限にすることもできます:
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 パーサー フィールドがクエリの最後の文字に解決されます。文字列全体が本当に必要なときに、クエリのすべての文字に対してアクションが呼び出されるようです。
読んでくれてありがとう!