Ich habe eine Frage über verschachtelte Grammatik. Wie lassen Sie Piparsen nach verschachtelten Grammatikkonstrukten suchen?PyParsing verhält sich nicht wie erwartet mit verschachtelter Grammatik
from pyparsing import Word, alphas, alphanums, Suppress, LineEnd, LineStart, nums, Or, Group, OneOrMore, Literal, CaselessLiteral, Combine, Optional
word = Word(alphanums+'_')
object_type = Suppress("object ")+word.setResultsName("object_type")+Suppress('{')+LineEnd()
point = Literal('.')
e = CaselessLiteral('E')
plusorminus = Literal('+') | Literal('-')
number = Word(nums)
integer = Combine(Optional(plusorminus) + number)
floatnumber = Combine(integer +
Optional(point + Optional(number)) +
Optional(e + integer)
)
attribute = word.setResultsName("attribute")
value = Or([floatnumber, word]).setResultsName("value")
attributes = Group(attribute+value+Suppress(";")+LineEnd())
namespace = Group(object_type+\ OneOrMore(attributes).setResultsName("attributes") + Suppress("}"))
all = OneOrMore(namespace).setResultsName("namespaces")
result = all.parseString(glm)
for n in result.namespaces:
print(n)
Das folgende Beispiel zeigt etwas, das ich zum Beispiel analysieren möchte. Der erste Namespace funktioniert wie erwartet. Die Sekunde jedoch kann nicht analysiert werden. Kann mir jemand erklären, was ich vermisse?
"""object object_type1{
attr1 0.0111;
name name_of_object_1;
}
object object_type1{
attr1 0.02;
name name_of_object_2;
object object_type2{
name name_of_object_3;
}
}
"""