我正在设计一个 ANTLR 语法,它至少需要识别指数表示法中的数字、变量标识符和字符串。我遇到了一个问题,语法将 1E4 识别为 E 开头的标识符,而不是将其识别为指数表示法中的数字。我正在 ANTLR 实验室 (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。然而,解析器似乎将其视为标识符的开头,这不是我想要的。
单击 ANTLR Lab 左上角的“Lexer”选项卡并删除内容。
您正在指定组合的词法分析器/解析器语法,但该词法分析器规范会产生干扰。