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