无法从 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()
子例程的子例程来处理结果列表。
我不能也不知道如何检索我使用 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()
子例程的子例程来处理结果列表。