Sto lottando per analizzare le strutture annidate con PyParsing. Ho cercato molti degli 'nested' example uses of PyParsing, ma non vedo come risolvere il mio problema.il trucco per nidificare le strutture nel pyparsing
Ecco ciò che la mia struttura interna si presenta come:
texture_unit optionalName
{
texture required_val
prop_name1 prop_val1
prop_name2 prop_val1
}
e qui è quello che la mia struttura esterna sembra, ma può contenere zero o più delle strutture interne.
pass optionalName
{
prop_name1 prop_val1
prop_name2 prop_val1
texture_unit optionalName
{
// edit 2: showing use of '.' character in value
texture required_val.file.name optional_val // edit 1: forgot this line in initial post.
// edit 2: showing potentially multiple values
prop_name3 prop_val1 prop_val2
prop_name4 prop_val1
}
}
Sto analizzando con successo la struttura interna. Ecco il mio codice per questo.
prop_ = pp.Group(pp.Word(pp.alphanums+'_')+pp.Group(pp.OneOrMore(pp.Word(pp.alphanums+'_'+'.'))))
texture_props_ = pp.Group(pp.Literal('texture') + pp.Word(pp.alphanums+'_'+'.')) + pp.ZeroOrMore(prop_)
texture_ = pp.Forward()
texture_ << pp.Literal('texture_unit').suppress() + pp.Optional(pp.Word(pp.alphanums+'_')).suppress() + pp.Literal('{').suppress() + texture_props_ + pp.Literal('}').suppress()
Ecco il mio tentativo di analizzare la struttura esterna,
pass_props_ = pp.ZeroOrMore(prop_)
pass_ = pp.Forward()
pass_ << pp.Literal('pass').suppress() + pp.Optional(pp.Word(pp.alphanums+'_'+'.')).suppress() + pp.Literal('{').suppress() + pass_props_ + pp.ZeroOrMore(texture_) + pp.Literal('}').suppress()
quando dico: pass_.parseString (testPassStr)
vedo errori nella console che "}" è stato previsto.
Lo vedo molto simile allo C struct example, ma non sono sicuro di quale sia la magia mancante. Sono anche curioso di sapere come controllare la struttura dati risultante quando si utilizza lo nestedExpr.
Ecco un altro esempio che supporta annidato strutture. Sembra che usi un 'pyparsing.Dict'. Tutti questi esempi mostrano un modo diverso per ottenere l'analisi annidata, qual è la comunanza? http://pyparsing.wikispaces.com/share/view/40834661 – cyrf