Hello! 欢迎来到小浪资源网!


ANTLR语法报错:为什么我的简单计算器语法无法识别数字?


ANTLR语法报错:为什么我的简单计算器语法无法识别数字?

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 令牌,并解析语法 دون出现错误。

相关阅读