Antlr4 为什么lexer规则名称单词导致解析错误

Antlr4 为什么lexer规则名称单词导致解析错误,antlr4,Antlr4,在下面的lexer解析器中, 从选项卡中选择AAA 可以分析,但 从选项卡中选择角色 无法分析,出现错误。 第1:7行输入“角色”不匹配,需要ID “角色”与lexer规则的名称相同这一事实似乎是导致错误的原因。 但是,我想将“角色”与 ID:[A-Z]+ 不想得到一个错误。 有没有办法解决这个问题 lexer grammar TSqlLexer; FROM: 'FROM' ; ROLE: 'ROLE' ; SELECT:

在下面的lexer解析器中,
从选项卡中选择AAA

可以分析,但
从选项卡中选择角色

无法分析,出现错误。
第1:7行输入“角色”不匹配,需要ID

“角色”与lexer规则的名称相同这一事实似乎是导致错误的原因。
但是,我想将“角色”与
ID:[A-Z]+
不想得到一个错误。
有没有办法解决这个问题

lexer grammar TSqlLexer;

FROM:               'FROM' ;
ROLE:               'ROLE' ;
SELECT:             'SELECT' ;
SPACE:              [ \t\r\n]+    -> skip;
ID:                 [A-Z]+ ;

lexer不是由解析器驱动的。解析器试图匹配一个
ID
,这无关紧要,输入的
“角色”
将始终成为
角色
标记

如果您的关键字也可以是标识符,请执行以下操作:

select_statement : SELECT column_name FROM table_name  ;
column_name      : id ;
table_name       : id ;
id               : ID | ROLE ; // add more keywords if needed

FROM             : 'FROM' ;
ROLE             : 'ROLE' ;
SELECT           : 'SELECT' ;
SPACE            : [ \t\r\n]+ -> skip;
ID               : [A-Z]+ ;

谢谢你的回答。问题解决了。
select_statement : SELECT column_name FROM table_name  ;
column_name      : id ;
table_name       : id ;
id               : ID | ROLE ; // add more keywords if needed

FROM             : 'FROM' ;
ROLE             : 'ROLE' ;
SELECT           : 'SELECT' ;
SPACE            : [ \t\r\n]+ -> skip;
ID               : [A-Z]+ ;