我不能也不知道如何检索使用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变量中。
非常感谢您!已经调试了几个小时。
答案 0 :(得分:0)
首先,尝试添加“线”规则以提供参考点。是的,您的应用程序可能不会使用多行,但是通常以防万一是很好的。
现在,编写一个子例程以在AST中找到每个“行”标记,并将其附加到列表中。
最后,我建议您使用基于LisPy中的eval()
子例程的子例程处理结果列表。