[英]Get Text from ~(';')+ in ANTLR
使用Antlr语法分析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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.