sql解析器上的antlr4不匹配输入错误

时间:2014-04-21 23:02:12

标签: antlr4

我在解析时遇到以下错误,但不确定它为什么会发生。

第1:24行不匹配的输入'1'期待NUM 第1:24行不匹配的输入'1'期待NUM 从abc limit 1中选择一个;

-

语法SQLCmd;

解析:sql ;

sql:('select'((columns(','columns))| count)'from')       表       ('where'条件((和|或)条件))*(限制)? ';' ;

限制:'限制'NUM ;

num:NUM ;

计数:'count(*)' ;

列:VAL ;

表:VAL ;

条件:(左'='右)+ ;

和:'和' ;

或:'或' ;

左:VAL ;

右:VAL ;

VAL:[* a-z0-9A-Z~?] + ;

NUM:[0-9] + ;

WS:[\ t \ n \ r] + - >跳跃 ;

1 个答案:

答案 0 :(得分:0)

看起来你有一个VAL而不是NUM

" 1"既是VAL又是NUM,但由于VAL首先出现,因此每个NUM将会永远成为NUM个令牌是VAL

尝试将NUM规则放在VAL规则之前。

你可以通过查看词法分析器中的令牌类型来自己发现这一点。这将告诉您存在的令牌的实际类型。

@TheAntlrGuy:也许可以将实际的令牌类型添加到错误消息中?