ANTLR递归替换

时间:2019-03-05 01:03:18

标签: recursion url-rewriting antlr

我想使用antlr更改DBMS_LOB.substr: 范例1: 输入:

DBMS_LOB.SUBSTR(field_name1, 4000, 1)

输出:

SUBSTR(field_name1, 1, 4000)

我们需要做两件事: 1)删除DBMS_LOB。 2)交换第二个和第三个参数

我可以覆盖特定令牌的规则,并对其进行更改以处理上述问题。

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

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))

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在不知道实现该任务的方法的情况下很难说出来。

但通常,建议可能如下所示:

将内部DBMS_LOB.SUBSTR语句视为单个非终止语句

我的意思是,在处理任何一种算法时,替换算法都应该没有区别

“ DBMS_LOB.SUBSTR(field_name1,4000,1)”

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

在两种情况下, 4000 DBMS_LOB.SUBSTR(field_name2,6000,1)都是参数,无论它们是什么样子组成。