「&」またはスペースで区切られた単語に一致する文法定義を作成するためのヘルプを探しています。
「aaa bbb」、「aaa & bbb」、「aaa bbb & ccc」、「aaa & ccc」など
ここでの問題は、スペースと「&」は同じ AND を意味しますが、残りのスペースは無視する必要があることです。
より一般的に言えば、Googleの高度な検索が検索に持っているような表現文字列の文法を書こうとしています。
現在のコード (動作していません):
grammar Query;
options {
language = CSharp3;
output = AST;
ASTLabelType = CommonTree;
}
tokens {
Minus = '-' ;
And = '&' ;
Or = '|' ;
}
/*-- PARSER RULES ------------------------------------------------------------*/
public expr
: Keyword (and Keyword)*;
and
: IgnoredWhiteSpace (And | WhiteSpace) IgnoredWhiteSpace ;
/*-- LEXER RULES -------------------------------------------------------------*/
Keyword : Char Char Char+ ;
//WhiteSpace : (' ' | '\t' | '\r' | '\n' | '\u000C')+ ;
WhiteSpace : ' ' ;
IgnoredWhiteSpace : (' ' | '\t' | '\r' | '\n' | '\u000C')+ { $channel = Hidden; } ;
fragment Char : ('0'..'9' | 'a'..'z' | 'A'..'Z' | '\u0410'..'\u042F' | '\u0430'..'\u044F' | '.') ;