我可以将字符串与 AST 的某个子树匹配吗?
Posted
技术标签:
【中文标题】我可以将字符串与 AST 的某个子树匹配吗?【英文标题】:Can I match a string to a certain subtree of the AST? 【发布时间】:2021-02-25 07:05:59 【问题描述】:我正在尝试使用antlr4(+python3)来检测sql注入,说现在我得到了后端SQL命令“SELECT * FROM AAA WHERE BBB = ''”,用户输入“CCC”。
现在解析树看起来像这样:
我的问题是,我可以将“CCC”(用户输入)直接匹配到子树“谓词”(见上图),即在“谓词”处进入解析树吗?
我有几个想法:
-
重写语法文件
使用访问者并跳过肯定出现在“谓词”之前的节点
这些想法很复杂,那么我应该在现有文献中寻找什么?或任何其他建议?
【问题讨论】:
什么是“预测”?这是从哪里来的? "predict" 是笔误,我改成了"predicate",就是图中所示AST的一个节点。抱歉打错了。 【参考方案1】:使用访问者并跳过肯定出现在“谓词”之前的节点
当然可以:当遍历解析树并遇到用户输入时,只需“遍历”节点,直到遇到您感兴趣的节点。遍历解析树时,ANTLR 会为您提供当前解析上下文.此上下文有一个 parent
上下文,您可以使用它“走”上树。
【讨论】:
以上是关于我可以将字符串与 AST 的某个子树匹配吗?的主要内容,如果未能解决你的问题,请参考以下文章
Excel - 需要从数组中搜索列表单元格的子字符串,无法获得索引/匹配工作吗?