无法从Lark AST获取值

时间:2019-07-04 06:42:41

标签: python-3.7 lark-parser

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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