试图获得ANTLR语法以遵循AND / OR语句

时间:2013-10-16 17:11:29

标签: java parsing antlr grammar

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

  

(A ='a'和B!='某事')或(C!='abc *')或(D!='xyz'和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

我得到了这棵树Generated Parse Tree

我仍在努力理解和学习ANTLR4,但是有人可以给我一些关于让它发挥作用的指示吗?

1 个答案:

答案 0 :(得分:1)

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