Antlr4 token识别错误和无关输入

Antlr4 token recognition error and extraneous input

我正在尝试为我的项目创建 SQL 解释器。当我 运行 我的程序时,我 运行 遇到了这些错误。

line 2:28 token recognition error at: ''a'
line 2:33 token recognition error at: '','
line 2:30 extraneous input 'nna' expecting Value

这是我的测试sql查询:

INSERT INTO teacher VALUES ('Anna', 21);

我的部分语法是:

insert: INSERT INTO ValidName VALUES '(' Value (',' Value)* ')' ';' ;
Value: Number | String;
ValidName: [a-z][a-z0-9_]*;
Number: [0-9]+;
String: '\''[^']+'\'';

我尝试打印 ctx.children 并得到了这个:

[INSERT, INTO, teacher, VALUES, (, nna, 21, ), ;]

谁能帮我看看我哪里做错了?

有几件事应该有所帮助:

1 - Value 可能应该是解析器规则而不是 Lexer 规则:

value: Number | String;

(并将规则中的 Valuess 更改为 values

2 - 对于您的 STRING 规则,使用非贪婪运算符获取所有内容直到匹配下一个字符会更简单一些:

STRING: '\'' .*? '\'';