Я использую pyparsing для разбора шестнадцатеричной строки и ищу автоматический способ печати дерева синтаксического анализатора.
Ближайший подход - это команда dump, но она выводит много дублирующейся информации.
Например:
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 для всех правил?