antlr语法报错分析及解决
问题:使用antlr实现加减乘除运算时,语法一直报错。
原因:
未能定义 int 规则。
解决方法:
添加以下代码来定义 int 规则:
fragment digits : [0-9] ([0-9_]* [0-9])? ; int: ('0' | [1-9] (digits? | '_'+ digits));
完整语法:
grammar Expr; fragment Digits : [0-9] ([0-9_]* [0-9])? ; INT: ('0' | [1-9] (Digits? | '_'+ Digits)); prog: expr EOF; expr: expr('*'|'/') expr #MultiOrDiv | expr('+'|'-') expr #AddOrSub | INT #Lieteral | '(' expr ')' #Single ; NEWLINE : [ ]+ -> skip;
运行后,语法不应再报错。