无法从 Lark AST 获取值

Cannot get values from Lark AST

我不能也不知道如何检索我使用 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 变量中。

在此先感谢您!已经调试了几个小时。

首先,尝试添加 "line" 规则以提供参考点。是的,您的应用程序可能不会使用多行,但通常最好包含一行以防万一。

现在,编写一个子程序来查找 AST 中的每个 "line" 标记,并将其附加到列表中。

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