0

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

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

4

1 回答 1

1

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

于 2013-11-08T12:25:30.843 回答