0

我有以下输入作为我想要的格式的示例。

(A = 'a' AND B != 'something') OR (C != 'abc*') OR (D != 'xyz' AND D != 'wui')

我有以下 ANTLR 语法,不幸的是它不能满足我的需要。

grammar Parser;

prog: expr*;
expr: LEFTPAREN expr RIGHTPAREN
    | expr (AND|OR) expr
    | LEFTPAREN equation RIGHTPAREN
    | equation
    ;
equation : identifier equality value
         | LEFTPAREN equation RIGHTPAREN
         ;
equality : (EQUALS | NOTEQUALS);
identifier : ID;
value : STRING;

LEFTPAREN : '(';
RIGHTPAREN : ')';
AND : '&&';
OR : '||';
EQUALS : '=';
NOTEQUALS : '!=';
NEWLINE : [\r\n]+ ;
STRING : ('"'|'\'') ('a'..'z'|'A'..'Z'|'0'..'9'|'*'|'_'|'-')* ('"'|'\'');
ID  :   ('a'..'z'|'A'..'Z')+;
INT :   '0'..'9'+;
WS  :   [ \t\n\r]+ -> skip ;

当我运行 antlr4 实用程序来运行它时

第 1:9 行在输入 '(A='a'AND' 第 1:13 行无关输入 'B' 期待 {'=', '!='} 第 1:29 行不匹配输入 ')' 期待 STRING 行没有可行的替代方案1:34 输入不匹配 '(' 期待 {'=', '!='} 行 1:51 输入不匹配 '(' 期待 {'=', '!='} 行 1:67 无关输入 'D' 期待 { '=', '!='} 第 1:77 行不匹配的输入 ')' 期待 STRING

我得到了这棵树生成的解析树

我仍在尝试理解和学习 ANTLR4,但任何人都可以给我一些关于让它工作的建议吗?

4

1 回答 1

1

您使用 AND 和 OR 还是使用 && 和 ||?语法需要 && 和 ||。

于 2013-10-16T17:22:04.723 回答