ANTLR4 解析包含关键字的变量名

ANTLR4 parsing a keyword-contained variable name

我正在尝试在 antlr4 中解析一个简单的整数声明。
我现在做的语法是:

main  : 'int' var '=' NUMBER+ ;
var   : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS    : [ \t\r\n]+ -> skip ;

当我尝试使用 int int_A = 0 测试主规则时,出现错误:

extraneous input 'int' expecting LETTER.

我知道这是因为变量名 'int_A' 包含关键字 'int',但我该如何修改我的语法?谢谢

词法分析器使用尽可能多的字符创建标记。所以 int_A 被标记为以下 3 个标记:

  • 'int'(解析器中定义的 int 关键字)
  • LETTER (_)
  • LETTER (A)

因此解析器无法使用这些标记创建 var

而不是解析器规则 var,使其成为词法分析器规则:

main   : 'int' VAR '=' NUMBER+ ;
VAR    : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS     : [ \t\r\n]+ -> skip ;