Używam pyparsing do parsowania ciągu szesnastkowego i szukam automatycznego sposobu drukowania drzewa parsera.Wydrukuj drzewo wyników pyparsingu
Podejście bliskie jest zrzutem polecenia, ale drukuje wiele powielonych informacji.
Na przykład:
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()
Celem jest to, że wynikiem result.dump() było coś podobnego do
- 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 drukowania nie jest obowiązkowe, udawał, że jest struktura drzewa .
Czy istnieje sposób na wykonanie tego wydruku, czy też będę potrzebował ustawić wartośćParsena dla wszystkich reguł?
Dzięki, zrobiłem coś takiego jak SimpleBool – Nine
Doskonała! Myślę, że twoja implementacja wygląda na rozsądny początek. –
dokładnie to, czego szukałem! bez tagowania trudno jest rozpoznać typy w drzewie. – dashesy