提问人:Antonio J. 提问时间:8/27/2023 更新时间:8/27/2023 访问量:39
用于识别指数表示法数字和标识符的 ANTLR 语法
ANTLR Grammar for Recognizing Exponential Notation Numbers and Identifiers
问:
我正在设计一种 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。但是,解析器似乎将其视为标识符的开头,这不是我的本意。
答:
0赞
Scott Stanchfield
8/27/2023
#1
单击 ANTLR Lab 左上角的“词法分析器”选项卡并删除内容。
您指定了词法分析器/解析器组合语法,但该词法分析器规范正在干扰。
评论
1赞
Antonio J.
8/27/2023
谢谢!这解决了我的问题。我会支持你的回答,但我没有足够的声誉。我真的很感谢你的帮助。
评论