2
我正在嘗試構建一個語法,但在此錯誤上陷入困境,無法看到我出錯的地方。爲什麼我在我的antl4語法中得到不匹配的輸入'='
如果我輸入詞組:
if(hello = "test", 1, 0)
到antlr4 testrig我得到* 「不匹配輸入 '=' 期待COMPARE_OP」 *。我究竟做錯了什麼?
這裏是我的全部語法:
prog: (expr|stats);
val_expr: (rename|rex);
cond_expr: (match|xif|compare_op);
expr: (val_expr|cond_expr|var|math_expr|eval);
rename : 'rename' var 'as' LITERAL; // match keyword hello followed by an
count : 'count' ('as' LITERAL)* ('by' var (',' var)*)*; //
match : 'match' '(' cond_expr ',' expr ')'; // match(x, y)
xif : 'if' '(' cond_expr ',' expr ',' expr ')'; // if(x, y, z)
var: (VARNAME|LITERAL|BLANK);
stats: 'stats' count;
eval: 'eval' VARNAME '=' expr;
rex: 'rex' ('field' '=' var)* LITERAL;
compare_op: math_term COMPARE_OP math_term;
math_expr: math_term (MATH_OP math_term)*;
math_term: (var|DIGITS);
VARNAME : [a-zA-Z_]([a-zA-Z0-9_])*;
DIGITS: [0-9]+;
WS : [ \t\r\n]+ -> skip ;
BLANK: '""';
LITERAL : '"' ('\\"' | .)*? '"' ;
COMPARE_OP: ([=><]|'>='|'<=');
MATH_OP: ('+'|'/'|'%'|'*'|'-');
謝謝,將代碼更改爲:'COMPARE_OPS:([><]|'> ='|'<='); EQUALS:'=';' – whisperstream