antlr4 line 1:10使用冲突名称时输入不匹配

时间:2014-04-22 17:28:09

标签: antlr4

我在sql语法中使用限制标记。它工作正常,但当我使用与令牌名称相同的列名时,我遇到了问题。我的列名与limit的名称相同。我该如何解决这个问题?

输出:

line 1:10 mismatched input 'limit' expecting VAL
line 1:10 mismatched input 'limit' expecting VAL

输入:

select a, limit from abc limit 55 ;

语法:

grammar SQLCmd;

parse : sql
;

sql : ('select' ((columns (',' columns)*)|count) 'from')
      tables
      ('where' condition ((and|or) condition)*)*  (limit)? ';'
;

num : NUM
;

count : 'count(*)'
;

columns : VAL
;

limit : 'limit' num
;

tables : VAL
;

condition : ( left '=' right )+
;

and : 'and'
;

or : 'or'
;

left : VAL
;

right : VAL
;

NUM : [0-9]+
;

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


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

1 个答案:

答案 0 :(得分:0)

您必须将columns规则展开为允许limit

columns
  : VAL
  | 'limit'
  ;