我正在寻找一些帮助来编写语法定义以匹配由“&”或空格分隔的单词,例如:
“aaa bbb”、“aaa & bbb”、“aaa bbb & ccc”、“aaa&ccc”等
这里的问题是空格和“&”表示相同的AND,但需要忽略其余空格。
更一般地说,我正在尝试为表达式字符串编写语法,例如谷歌高级搜索在他们的搜索中。
当前代码(不工作):
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' | '.') ;