antlr4 lexer规则不匹配字符串

时间:2014-02-07 12:14:17

标签: java sql regex antlr antlr4

如何编写antlr4语法词法规则以匹配字符串。例如,我有以下输入字符串:

CREATE TABLE person 
( age integer,
  id integer,
  name character varying(30)),
  PRIMARY KEY ( id )
);

在这里,我需要跳过上面包含“PRIMARY KEY”约束的创建表查询。

我们可以直接在词法规则中使用正则表达式吗?

1 个答案:

答案 0 :(得分:0)

为SQL编写一些必需而非必需的规则。

goodSQL:
    'CREATE' 'TABLE' Id '('
    Id typeDef (',' Id typeDef)? ','
    ')'
;

badSQL:
    'CREATE' 'TABLE' Id '('
    Id typeDef (',' Id typeDef)? ','
    'PRIMARY' 'KEY' keyDef
    ')' ->skip
;

这是开始的事情。在此之后,您必须定义IdtypeDefkeyDef。添加->skip不会解析与规则匹配的SQL语句。

祝你好运!