Ich brauche Hilfe beim Parsen einer benutzerdefinierten Datei strukturierte Datei. Wie Sie unten sehen können, ist die Struktur. Das Problem ist, dass ich nicht scheinen kann, die Struktur korrekt zu analysieren, nämlich myOriginalFormula
& myBonusType
in der gleichen Gruppe, wenn ich sie zum Beispiel getrennt haben möchte.Parsing benutzerdefinierte strukturierte Datei mit PyParsing
AttributeDictionary SomeDictName
{
myAttributeDefinitionCategories
{
AttributeDefinitionList SomeList
{
AttributeDefinition SomeDefinitioName <uid=8972789HHDUAI7>
{
myOriginalFormula "(A_Variable) * 10"
myBonusType FlatValue
}
AttributeDefinition UIBlankAttribute <uid=JIAIODJ7899>
{
}
AttributeDefinition SomeOtherDefinitionName <uid=17837HHJAJ7788>
{
myOriginalFormula 1
mySpecializations
{
Specialization "Some_Specialization 1"
{
myCondition "Something.MustEqual = 1"
myFormula 0
}
Specialization "SomeSpecialization 2"
{
myCondition "Something.MustEqual = 2"
myFormula 0.026
}
}
myBonusType FlatValue
}
AttributeDefinition SomeReal_Other_definition < uid=6768GYAG//() >
{
myOriginalFormula "(Some_Formula/Other_Variable) - 1"
myBonusType Percentage
myUINumDecimals 1
myHasAddSignUI FALSE
}
}
}
}
Mein Versuch ist Schlag. Könnte mir jemand helfen, diese Struktur korrekt zu analysieren?
def syntaxParser():
# constants
left_bracket = Literal("{").suppress()
right_bracket = Literal("}").suppress()
semicolon = Literal(";").suppress()
space = White().suppress()
key = Word(alphanums + '_/"')
value = CharsNotIn("{};,")
# rules
assignment = Group(key + Optional(space + value))
block = Forward()
specialblock = Forward()
subblock = ZeroOrMore(Group(assignment) | specialblock)
specialblock = (
Keyword("Specialization")
+ key
+ left_bracket
+ subblock
+ right_bracket)
block << Group(
Optional(Group(key + Optional(space + value)))
+ left_bracket
+ Group(ZeroOrMore(assignment | Group(block) | Group(specialblock)))
+ right_bracket)
script = block
return script