用于识别指数表示法数字和标识符的 ANTLR 语法

ANTLR Grammar for Recognizing Exponential Notation Numbers and Identifiers

提问人:Antonio J. 提问时间:8/27/2023 更新时间:8/27/2023 访问量:39

问:

我正在设计一种 ANTLR 语法,它至少需要识别指数表示法、变量标识符和字符串中的数字。我遇到了一个问题,即语法将 1E4 识别为好像 E 开始一个标识符,而不是将其识别为指数表示法中的数字。我正在 ANTLR Lab (lab.antlr.org) 上对此进行测试。

这是我正在使用的测试语法:

grammar prueba;

// Parser rules
program : (numeric_constant | identifier)* EOF;

numeric_constant   : sign? number (EXPONENT sign? integer)? ;
number             : integer ('.' integer?)? ;
integer            : DIGIT+ ;
sign               : PLUS_SIGN | MINUS_SIGN ;
identifier         : LETTER (LETTER | DIGIT)* ;

// Lexer rules
EXPONENT           : 'E' ;
PLUS_SIGN          : '+' ;
MINUS_SIGN         : '-' ;
LETTER             : [A-Za-z] ;
DIGIT              : [0-9] ;

我正在使用输入进行测试:1E4,我收到以下错误:

1:0 mismatched input '1' expecting {, '+', '-', ',', ';'}

关于为什么它不将 1E4 识别为数字以及如何修复它的任何见解?

我试过什么:

我设计语法的目的是以指数表示法(如 1E4)识别数字。我期望语法将 1E4 识别为numeric_constant,但相反,它似乎将 E 视为标识符的开始。

我所期望的:

给定输入 1E4,我希望它被解析为numeric_constant。但是,解析器似乎将其视为标识符的开头,这不是我的本意。

解析 ANTLR4 语法

评论


答:

0赞 Scott Stanchfield 8/27/2023 #1

单击 ANTLR Lab 左上角的“词法分析器”选项卡并删除内容。

您指定了词法分析器/解析器组合语法,但该词法分析器规范正在干扰。

评论

1赞 Antonio J. 8/27/2023
谢谢!这解决了我的问题。我会支持你的回答,但我没有足够的声誉。我真的很感谢你的帮助。