【标题】(请简要描述下实现的内容)
修复函数中处理数组元素引用变量报错的问题
【实现内容】:
将 array[index:length] 中的 :length 当成数组下标来处理
【根因分析】:
当前语法分析时把 array[index:length] 这种形式的写法中的 :length 当成了占位符来处理,导致函数中同时出现了 $1 和:length两种写法,从而报不能同时使用 $ 和 :xx
当前语法分析的规则:

newParam		:({identifier}|{integer})
newArray		:({integer}{space}*\])

可以看出对于 array[index:length] 这种形式, 由于'length'是identifier,所以 :length 将匹配到 newParam,即占位符。只有对于 array[index:4],这种是 : + 数字 的场景才能匹配到 newArray,即数组的场景。但是,显然从实际语义分析 array[index:length] 中,length代表的不是占位符,而是一个普通变量,代表数组的下标,应当解析成 newArray。

【修改方案】:

  1. 修改 newArray 的匹配规则,对于 :identifier]形式的,应该解析为 newArray
  2. 匹配到 newArray 后,设置 yyloc(执行 SET_YYLOC()),正确标识当前位置,后续在组装动态sql时能正确识别词语的起始结束位置

【关联issue】:
#I3IPYJ:函数中处理数组元素引用变量报错

【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
    输入图片说明
  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
    是,已添加
  3. 是否涉及资料修改,如是,在docs仓库补充资料
    不涉及
  4. 是否考虑支撑升级和在线扩容等扩展场景
    不涉及
  5. 是否考虑异常场景/并发场景/前向兼容/性能场景
    不涉及
  6. 是否对其他模块产生影响
    不涉及