Antlr递归替换



我想使用antlr更改dbms_lob.substr:示例1:输入:

DBMS_LOB.SUBSTR(field_name1, 4000, 1)

输出:

SUBSTR(field_name1, 1, 4000)

我们需要做2件事:1)删除DBMS_LOB。2)互换2nd&第三参数

我能够覆盖特定令牌的规则并将其更改以处理上述。

处理递归的问题:我有这样的输入:

DBMS_LOB.SUBSTR(field_name1, DBMS_LOB.SUBSTR(field_name2, 6000, 1), DBMS_LOB.SUBSTR(field_name3, 8000, 1))

我想更改类似:

SUBSTR(field_name1, SUBSTR(field_name3, 1, 8000), SUBSTR(field_name2, 1, 6000))

当原始语句中的多个级别出现多个级别时,如何处理如何处理。

任何帮助将不胜感激。

如果不知道您用来实现此任务的方法,很难分辨。

但总的来说,建议看起来像这样:

将Inner dbms_lob.substr语句视为单末端语句

我的意思是,在处理

时,您的替换算法没有区别

" dbms_lob.substr(field_name1,4000,1)"

" dbms_lob.substr(field_name1,dbms_lob.substr(field_name2,6000,1),dbms_lob.sub.substr(field_name3,8000,1))"。

在两种情况下由。

最新更新