使用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"。有人知道怎么弄到整个街区吗?
经过一些测试,我发现content
是CommonToken
类型的,即content
只指单个标记,因此它不包含所有标记。
一个解决方案是,将标签content
提升为contentRule
:
//...
constraintName=alter_table_constraint_name 'CHECK' content=contentRule #alterTableAddCheck
//...
contentRule : ~(';')+;
或者正如Sam在这里提到的,使用这种语法(注意标签名称后面的+=
而不是=
),并通过连接每个列表成员的单独文本来获得完整的文本(这甚至允许您在标记之间包含空白,如果愿意的话):
...
constraintName=alter_table_constraint_name 'CHECK' (content+=~';')+ #alterTableAddCheck
...