从 ~ 获取文本 ~ (';')+ 在 ANTLR



使用Antlr-grammar解析SQL文件,我想获得~(';')+的总文本值,以便记录我没有深入解析的信息。不幸的是,调用getText()只会得到最后一个单词。

这是活动的解析规则:

...
constraintName=alter_table_constraint_name 'CHECK' content=~(';')+  #alterTableAddCheck
...

解析这部分:

ALTER TABLE "UFHDBTBL"."FH01T54" 
    ADD CONSTRAINT "FH01C54_DYNAMIC" CHECK 
        (DYNAMIC IN ('Y','N'))
    ENFORCED
    ENABLE QUERY OPTIMIZATION;

在我的程序中稍后调用getText()只会导致输出"OPTIMIZATION"。有人知道怎么弄到整个街区吗?

经过一些测试,我发现contentCommonToken类型的,即content只指单个标记,因此它不包含所有标记。

一个解决方案是,将标签content提升为contentRule:

//...
constraintName=alter_table_constraint_name 'CHECK' content=contentRule  #alterTableAddCheck
//...

contentRule : ~(';')+;

或者正如Sam在这里提到的,使用这种语法(注意标签名称后面的+=而不是=),并通过连接每个列表成员的单独文本来获得完整的文本(这甚至允许您在标记之间包含空白,如果愿意的话):

...
constraintName=alter_table_constraint_name 'CHECK' (content+=~';')+  #alterTableAddCheck
...

相关内容

  • 没有找到相关文章

最新更新