gpt4 book ai didi

python - 打印 pyparsing 结果树

转载 作者:太空狗 更新时间:2023-10-30 00:00:11 24 4
gpt4 key购买 nike

我正在使用 pyparsing 来解析一个十六进制字符串,我正在寻找一种自动打印解析器树的方法。

一个接近的方法是命令转储,但它会打印很多重复的信息。

例如:

from pyparsing import * #Word, Optional, OneOrMore, Group, ParseException

data = Forward()

arrayExpr = Forward()

def data_array(s,l,t):
n = int(t[0], 16)
arrayExpr << ( n * data)
return t[0]

array = Word(hexnums, exact=2).setParseAction(data_array) + arrayExpr

data << (Literal('01') + array.setResultsName('array')
| Literal('03') + Word(hexnums, exact=2)('char')
| Literal('04') + Word(hexnums, exact=2)('boolean'))

frame = (Word(hexnums, exact=2)('id') \
+ data('data'))('frame')

result = frame.parseString("02010203010302");
print result.dump()

目标是 result.dump() 的结果类似于

 - frame: ['02', '01', '03', '03', '01', '04', '02', '03', '02']
- id: 02
- array: ['03', '03', '01', '04', '02', '03', '02']
- char: 01
- boolean: 02
- char: 02

pretty-print 不是强制的,伪装的是树结构。

有没有办法制作此打印件,或者我需要为所有规则设置一个 setParseAction?

最佳答案

看起来您需要为每个规则设置一个 setParseAction。

来自 parsing to object hierarchy :“将解析操作附加到每个表达式,但这里有一个技巧:使用类而不是函数。将调用类的 init 方法,并返回该类的实例。”

关于python - 打印 pyparsing 结果树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com