Antlr 为什么我的输入不匹配'=';在我的antl4语法中

Antlr 为什么我的输入不匹配'=';在我的antl4语法中,antlr,grammar,dsl,antlr4,mismatch,Antlr,Grammar,Dsl,Antlr4,Mismatch,我试图建立一个语法,但我陷入了这个错误,看不出我错在哪里了 如果我输入以下短语: if(hello = "test", 1, 0) 在antlr4测试装备中,我得到*“不匹配的输入”=“期望比较”*。我做错了什么 这是我的全部语法: prog: (expr|stats); val_expr: (rename|rex); cond_expr: (match|xif|compare_op); expr: (val_expr|cond_expr|var|math_expr|eval); rename

我试图建立一个语法,但我陷入了这个错误,看不出我错在哪里了

如果我输入以下短语:

if(hello = "test", 1, 0)
在antlr4测试装备中,我得到*“不匹配的输入”=“期望比较”*。我做错了什么

这是我的全部语法:

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: ('+'|'/'|'%'|'*'|'-');
prog:(expr | stats);
val|u expr:(重命名为| rex);
条件表达式:(匹配| xif |比较| op);
表达式:(val|u expr | cond|u expr | var | math|u expr | eval);
重命名:“将“var”重命名为“LITERAL;”/匹配关键字hello,后跟
计数:'count'('as'LITERAL)*('by'var(','var)*)*;//
匹配:'match'('cond_expr','expr');//匹配(x,y)
xif:'如果'('cond_expr','expr','expr');//if(x,y,z)
var:(VARNAME | LITERAL | BLANK);
统计:“统计”计数;
eval:'eval'VARNAME'='expr;
rex:'rex'('field'='var)*文本;
比较:数学术语比较数学术语;
数学表达式:数学术语(数学运算数学术语)*;
数学术语:(变量|位数);
VARNAME:[a-zA-Z_]([a-zA-Z0-9_])*;
数字:[0-9]+;
WS:[\t\r\n]+->跳过;
空白:“”“”;
文字:““”(“\\”“\;)*?”"' ;

比较操作:([=>这是因为您要求它以两种方式匹配“=”:一种是作为语法中的文字,另一种是作为比较操作的一部分。它使用最具体的,即简单的“=”。我建议您将“=”从比较操作中分离出来。

谢谢,将代码更改为:
比较操作:([>