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

Parsing ANTLR4解析包含变量名的关键字,parsing,antlr4,grammar,Parsing,Antlr4,Grammar,我试图在antlr4中解析一个简单的整数声明。 我现在做的语法是: main : 'int' var '=' NUMBER+ ; var : LETTER (LETTER | NUMBER)* ; LETTER: [a-zA-Z_] ; NUMBER: [0-9] ; WS : [ \t\r\n]+ -> skip ; 当我尝试使用int_A=0测试主规则时,出现了一个错误: 外部输入“int”应为字母 我知道这是因为变量名“int_A”包含关键字“int”,但我如何修改语法

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

main  : 'int' var '=' NUMBER+ ;
var   : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS    : [ \t\r\n]+ -> skip ;
当我尝试使用
int_A=0
测试主规则时,出现了一个错误:

外部输入“int”应为字母


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

lexer会创建尽可能多字符的代币。因此,
int_A
被标记为以下3个标记:

  • 'int'
    (语法分析器中定义的int关键字)
  • 字母
  • 字母
    A
因此,解析器无法使用这些标记创建
var

不要使用解析器规则
var
,而是使用lexer规则:

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

谢谢你的帮助。这个答案也澄清了我对解析器编程的误解。欢迎@CarloChuang,注意您还想做
NUMBER:[0-9]+和非:
编号:[0-9]