【问题标题】:Antlr4 token recognition error and extraneous inputAntlr4 令牌识别错误和无关输入
【发布时间】:2021-12-22 14:28:14
【问题描述】:

我正在尝试为我的项目创建 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, ), ;]

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

【问题讨论】:

  • 除非这是一个学校项目,否则我不会从头开始写这样的东西。从 Github 找到语法或解析器,或在 github.com/antlr/grammars-v4 上查找

标签: antlr4


【解决方案1】:

有几件事应该会有所帮助:

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

value: Number | String;

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

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

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

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多