搜索关键字的语法定义

时间:2013-11-07 21:24:20

标签: antlr grammar

我正在寻找帮助编写语法定义以匹配由'&'分隔的单词的帮助或空格,如:

“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' | '.') ;

1 个答案:

答案 0 :(得分:1)

不要在语法中放置对IgnoredWhitespace的引用(由于$channel=HIDDEN,语法不会看到这些),并使And可选(And)?