antlr 语法报错解析
刚接触 antlr 的开发者可能会遇到最简单的计算语法报错。本文将深入探究一个简单的 antlr 语法示例,并解决遇到的语法错误。
错误信息
预处理的 antlr 语法如下:
grammar expr; prog: expr eof; expr: expr('*'|'/') expr #multiordiv | expr('+'|'-') expr #addorsub | int #lieteral | '(' expr ')' #single ; newline : [ ]+ -> skip;
运行后,显示以下错误消息:
1:1 token recognition error at: '+' 1:3 token recognition error at: '*' 1:2 mismatched input '2' expecting {, '*', '/', '+', '-'}
原因分析
语法错误源于对 int 符号的未定义。在给定的语法中,int 未声明为一种令牌,因此 antlr 不知道如何识别它。
解决方案
要解决此问题,添加 int 令牌定义以下内容:
INT: ('0' | [1-9] (Digits? | '_'+ Digits));
此定义将 int 令牌定义为以 0 开头或以 1-9 之间的一个数字开头的数字,后面可以是任意数量的数字或下划线加数字。
结果
添加 int 定义后,antlr 将可以识别 int 令牌,并解析语法 دون出现错误。