首页 > 解决方案 > 如何使用 ANTLR V4 提取未定义的全局变量

问题描述

我有一个 Python 语法和一个文本框,用户可以在其中编写简单的 Python 表达式,例如:

(lambda x: str(x))(wanted_input)

然后用wanted_input 注入表达式(通过使用我们执行python expr 时创建的人工上下文)。

如果可以使用解析树侦听器来提取基本上是未定义的全局变量的wanted_input ,我很感兴趣。

标签: javascriptjavapythonantlrantlr4

解决方案


是的,这是可能的。

我相信只有三种类型的表达式可以引入新的变量名:lambdas、列表推导和生成器推导。因此,在您的侦听器或访问者中,您需要在输入这三种类型的表达式时将新引入的变量添加到当前范围,然后在退出时再次删除它们(确保处理变量被遮蔽的情况 - 某种堆栈通常是这里选择的工具)。然后,当您看到一个变量时,您只需检查它是否在当前范围内定义。如果不是,它是您要提取的变量之一。


推荐阅读