我正在寻找帮助编写语法定义以匹配由'&'分隔的单词的帮助或空格,如:
“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' | '.') ;
答案 0 :(得分:1)
不要在语法中放置对IgnoredWhitespace的引用(由于$channel=HIDDEN
,语法不会看到这些),并使And
可选(And)?
。