我正在使用pyparsing來分析十六進制字符串,並且我正在搜索打印解析器樹的自動方式。打印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
漂亮的印刷是不是強制性的,這個假是樹形結構。
有沒有辦法讓這個打印或我需要有一個setParseAction所有規則?
如何謝謝你,我做了類似的SimpleBool – Nine 2012-03-29 22:50:56
好極了!我認爲你的實施看起來是一個合理的開始。 – 2012-03-30 20:11:23
正是我在找的!沒有標籤,很難理解樹中的類型。 – dashesy 2015-01-22 17:01:08