Verschachtelte Ausdrücke parsen
Hi,
ich habe momentan ein Problem verschachtelte Ausdrücke zu parsen. Derzeit schlägt jeder meiner Ansätze fehl, weshalb ich nun auf Hinweise aus der Community hoffe.
Problem:
Ich habe einen String, als Beispiel: "a-b-(((c-d)|e)-(f|g))-((h-i)|(j-k))-l-m"
Der Strich ("-") stellt den nächsten Status auf dem dargestellten Pfad dard und die Pipe ("|") ein oder.
Ich habe im Endeffekt somit einen Pfad mit Verzweigungen.
Gibt es irgendwelche Parser-Libraries, die einem solche Ausdrücke sinnvoll zurück geben?
Ich würde gerne etwas Code einfügen, der meine bisherigen Ansätze demonstriert, aber das bringt leider nicht viel. Die sind alle nicht annähernd praktikabel.
Bin um Hinweise dankbar...
Beste Grüße
ich habe momentan ein Problem verschachtelte Ausdrücke zu parsen. Derzeit schlägt jeder meiner Ansätze fehl, weshalb ich nun auf Hinweise aus der Community hoffe.
Problem:
Ich habe einen String, als Beispiel: "a-b-(((c-d)|e)-(f|g))-((h-i)|(j-k))-l-m"
Der Strich ("-") stellt den nächsten Status auf dem dargestellten Pfad dard und die Pipe ("|") ein oder.
Ich habe im Endeffekt somit einen Pfad mit Verzweigungen.
Gibt es irgendwelche Parser-Libraries, die einem solche Ausdrücke sinnvoll zurück geben?
Ich würde gerne etwas Code einfügen, der meine bisherigen Ansätze demonstriert, aber das bringt leider nicht viel. Die sind alle nicht annähernd praktikabel.
Bin um Hinweise dankbar...
Beste Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178823
Url: https://administrator.de/contentid/178823
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
5 Kommentare
Neuester Kommentar
mh ... evtl. als eine XML Sequenz ?
<root>
<position name="A"/>
<position name="B" />
<branch>
<left>
<position name="C" />
<position name="D" />
</left>
<right>
<position name="E" />
</right>
</branch>
<branch>
<left>
<position name="F" />
</left>
<right>
<position name="G" />
</right>
</branch>
<branch>
<left>
<position name="H" />
<position name="I" />
</left>
<right>
<position name="J" />
<position name="K" />
</right>
</branch>
<position name="L" />
<position name="M" />
</root>
Gibt es irgendwelche Parser-Libraries, die einem solche Ausdrücke sinnvoll zurück geben?
Stichwort: Parser Generatoren.
Wenn du es selber machen willst braucht du wohl einen rekursiven zeichenbasierten Parser mit einem gemeinsamen Zeiger auf den String.
Ich hatte es grade beispielsweise mal fertig geschrieben, aber in dem Moment hat sich mein Editor verabschiedet.
Ein zusätzliches Problem ist, dass die Konstrukte
(f|g)
und(f-e)
eine völlig andere Bedeutung haben, aber der Parser es erst nach dem 3. Zeichen erkennen kann - du würdest es dir leichter machen wenn du andere Klammern benutzt.Als Denkanstoß mal die ungeprüfte BNF:
<pfad> ::= <titel> <restpfad>
<gruppe> ::= "(" <gruppentyp> ")"
<gruppentyp> ::= <pfad> | <oder>
<oder> ::= <odertyp> "|" <restoder>
<odertyp> ::= <titel> | <gruppe>
<restoder ::= <odertyp> | <oder>
<restpfad> ::= | "-" <pfadelement>
<pfadelement> ::= <pfad> | <gruppe>
<titel> ::= "a" | "b" | ... | z