javascript - 如何使用 ANTLR V4 提取未定义的全局变量
问题描述
我有一个 Python 语法和一个文本框,用户可以在其中编写简单的 Python 表达式,例如:
(lambda x: str(x))(wanted_input)
然后用wanted_input 注入表达式(通过使用我们执行python expr 时创建的人工上下文)。
如果可以使用解析树侦听器来提取基本上是未定义的全局变量的wanted_input ,我很感兴趣。
解决方案
是的,这是可能的。
我相信只有三种类型的表达式可以引入新的变量名:lambdas、列表推导和生成器推导。因此,在您的侦听器或访问者中,您需要在输入这三种类型的表达式时将新引入的变量添加到当前范围,然后在退出时再次删除它们(确保处理变量被遮蔽的情况 - 某种堆栈通常是这里选择的工具)。然后,当您看到一个变量时,您只需检查它是否在当前范围内定义。如果不是,它是您要提取的变量之一。
推荐阅读
- javascript - Javascript - 当 ID 添加到同一页面上 url 的末尾时,window.location.href 和 window.location.replace 不起作用
- java - java - 调用自定义火花UDF时如何解决Java中的NoSuchMethodException
- html - 使用 CSS GRID 为什么我会遇到这个差距?
- c++ - 优先队列中的比较器功能
- dll - 如何在 .dll (Dymola) 中使用 ModelicaError() 函数
- python - (Pathlib) Root + 'foldername' throwing TypeError: unsupported operand type(s) for +: 'WindowsPath' and 'str'
- .htaccess - 如何在 htaccess 中添加 http/2 标头以推送文件
- git - 多分支 Jenkins 管道停止扫描所有分支中的 Jenkins 文件
- python-3.x - 使用 cv2.dnn.readNetFromTorch 时出错
- javascript - 来自字符串的完美 JSON 格式