Печать дерева результатов 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 для всех правил?

6
задан Nine 23 March 2012 в 18:43
поделиться