首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从lark解析器树中获取变量名列表?

如何从lark解析器树中获取变量名列表?
EN

Stack Overflow用户
提问于 2021-03-17 22:33:16
回答 1查看 122关注 0票数 0

我使用的是python 3.8.5和lark-parser 0.11.2。我有一个关于访客的问题。

我有一个满足我需要的语法,Lark工作得很好。我有一个例子,在某些情况下,我想要计算返回的解析树,并扫描它以获得树中出现的变量名列表,可能是空的。

示例表达式如下:

代码语言:javascript
复制
count + num_items

表达式中的解析树是:

代码语言:javascript
复制
Tree('add', [Tree('variable', [Token('VARIABLE', 'count')]), Tree('variable', [Token('VARIABLE', 'num_items')])])

我想我应该编写一个Visitor类来扫描树中的变量,并将它们存储在一个内部列表中:

代码语言:javascript
复制
from lark import Visitor, v_args
@v_args(inline=True)
class FindVariables(Visitor):
    def __init__(self):
        super().__init__()
        self.variable_list = []

    def variable(self, var):
        try:
            self.variable_list.append(var)
        except Exception as e:
            raise

我试着使用它作为:

代码语言:javascript
复制
fv = FindVariables()
fv2 = fv.visit(parse_result)
for var in fv.variable_list:
    ...

我遇到的问题是,当执行fv = FindVariables()时,我得到了一个TypeError异常:

代码语言:javascript
复制
f() missing 1 required positional argument: 'self'

如果我将上面的调用更改为:

代码语言:javascript
复制
fv = FindVariables().visit(parse_result)

语句运行,但是fv没有“看到”variable_list

我可能误用了Visitor类。有没有最好的/更好的方法来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 23:29:41

好吧,我正在回答我的问题,但我不确定这就是答案。

我在问题中的代码块中将Visitor更改为Transformer,并正常工作。

我很高兴我有了一个解决方案,但感觉Visitor应该是这里的正确工具。我仍然很高兴发现我在这里是否滥用了lib,以及是否有更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66675186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档