无法从Lark AST获取值

问题描述 投票:0回答:1

我不能也不知道如何检索使用Lark解析器生成的AST的值。

我的语法如下,保存在.lark文件中:

start: (un_handle ": ")? AMOUNT "|" p_handle ("," p_handle)* (" \"" MESSAGE* "\"")?

AMOUNT: /[0-9]+(\.[0-9][0-9]?)?/

un_handle: HANDLE

p_handle: HANDLE

HANDLE : /[A-Z][A-Z]/

MESSAGE : /[^"]+/

然后我运行:

testText = '10|GP "Bananas"'
testTree = parser.parse(testText)

并获得:

Tree(start, [Token(AMOUNT, '10'), Tree(p_handle, [Token(HANDLE, 'GP')]), Token(MESSAGE, 'Bananas')])

但是,现在怎么办?

我意识到我可能必须建造一个变压器,但是我应该定义什么方法,我应该称它们为什么?我只想提取AMOUNT,un_handle,p_handle(可能有多个p_handle)和消息的值到Python变量中。

非常感谢您!已经调试了几个小时。

python-3.7 lark-parser
1个回答
0
投票

首先,请尝试添加“线”规则以提供参考点。是的,您的应用程序可能不会使用多行,但通常以防万一。

现在,编写一个子例程以在AST中找到每个“行”标记,并将其附加到列表中。

最后,我建议您使用基于eval()中的LisPy子例程的子例程来处理结果列表。>

© www.soinside.com 2019 - 2024. All rights reserved.