小编use*_*108的帖子

ANTLR - 树中的隐式AND标记

我正在尝试构建一个解释用户输入文本,搜索引擎样式的语法.它将支持AND,OR,NOT和ANDNOT布尔运算符.我几乎所有工作都有效,但是我想添加一个规则,即在带引号的字符串之外的两个相邻关键字被隐含地视为AND子句.例如:

奶酪和饼干=奶酪和饼干

(上下)或(左和右)=(上下)或(左和右)

猫狗"大肚猪"=猫与狗和"大肚猪"

我遇到了最后一个问题,我希望有人可以指出我正确的方向.到目前为止,这是我的*.g文件,请保持良好,我的ANTLR体验不到一个工作日:

grammar SearchEngine;

options { language = CSharp2; output = AST; }

@lexer::namespace { Demo.SearchEngine }
@parser::namespace { Demo.SearchEngine }

LPARENTHESIS : '(';
RPARENTHESIS : ')';

AND    : ('A'|'a')('N'|'n')('D'|'d');
OR     : ('O'|'o')('R'|'r');
ANDNOT : ('A'|'a')('N'|'n')('D'|'d')('N'|'n')('O'|'o')('T'|'t');
NOT    : ('N'|'n')('O'|'o')('T'|'t');

fragment CHARACTER : ('a'..'z'|'A'..'Z'|'0'..'9');
fragment QUOTE     : ('"');
fragment SPACE     : (' '|'\n'|'\r'|'\t'|'\u000C');

WS     : (SPACE) { $channel=HIDDEN; };
PHRASE : (QUOTE)(CHARACTER)+((SPACE)+(CHARACTER)+)+(QUOTE);
WORD   : (CHARACTER)+;

startExpression  : andExpression;
andExpression    : andnotExpression (AND^ andnotExpression)*;
andnotExpression : orExpression (ANDNOT^ orExpression)*; …
Run Code Online (Sandbox Code Playgroud)

antlr antlr3

4
推荐指数
1
解决办法
550
查看次数

标签 统计

antlr ×1

antlr3 ×1