我在解析时遇到以下错误,但不确定它为什么会发生。
第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] + - >跳跃 ;
答案 0 :(得分:0)
看起来你有一个VAL
而不是NUM
。
" 1"既是VAL
又是NUM
,但由于VAL
首先出现,因此每个NUM
将会永远成为NUM
个令牌是VAL
。
尝试将NUM
规则放在VAL
规则之前。
你可以通过查看词法分析器中的令牌类型来自己发现这一点。这将告诉您存在的令牌的实际类型。
@TheAntlrGuy:也许可以将实际的令牌类型添加到错误消息中?