Grafischen Baum parsen
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
ablauf
blocken
datei
exportieren
generelle tips
grafisch darstellen
index
knoten
nachfolger
nummer
pfeil
realisieren
schleifen
speichern
text
url
verbindung
vorliegen
zweig
zweiter pfeil
-
Ich weiß nicht genau wie treffend der Titel gewählt ist, aber ich habe eine GUI für ein Programm von mir geschrieben mit der ich Programmstrukturen (wenn man das so nennen kann) wie diese erstellen und grafisch darstellen kann:
http://projektverwaltung.lima-city.de/ablauf.gif
Jetzt will ich aber das ganze "exportieren", bzw. so als Text in eine Datei packen, dass ich einen Parser schreiben kann der das ganze abarbeitet (mir ist hier im Moment nicht der Parser selbst wichtig, ich frage mich nur wie ich die Schleifen und Bedinungen zum Speichern in einer Datei in Textform darstellen kann, vor allem aufgrund aller möglichen Verschachtelungen, so dass noch nachvollziehbar ist was zu welcher Schleife und zu welchem Zweig gehört).
Meine Idee war über Backtracking alle möglichen Pfade zu finden und alle zu speichern, aber bei größeren Strukturen ergäbe das eben auch übermäßig große Dateien.
Das ganze versuche ich in Python zu realisieren, generelle Tips unabhängig von einer Programmiersprache wären aber auch schon sehr hilfreich, da ich mir seit gestern Abend den Kopf zerbreche und einfach zu keiner Lösung komme.
Ich hoffe mal, dass ich mich verständlich genug ausgedrückt habe (auch wenn ich das selbst nicht wirklich glaube) und vor allem dass mir jemand helfen kann :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Beispielsweise kannst du zuerst alle Knoten speichern (dann kannst du ihnen Nummern und Typi zuordnen) und dann alle Verbindungen, d.h. Verbindung von Knoten 7 zu Knoten 11 oder True-Verbindung von Knoten 13 zu Knoten 7.
Es wäre interessant zu wissen, in welcher Form du den Parse-Baum zur Ausführungszeit vorliegen hast... -
Ich habe das ganze (im Nachhinein muss ich sagen leider) nicht Objektorientiert gemacht, sondern ein Dicitionary Vorgänger, das für jeden Knoten den Pfeil zurückliefert der daran angebunden ist, bzw. für Bedinungs und Schleifenelemente noch ein Dicitionary Vorgänger2 (weil nur von Schleifen und Bedinungen ein zweiter Pfeil ausgehen kann und ein Dicitionary einen Schlüssel (der Knoten von dem der Pfeil ausgeht) nur einmal haben darf)
Dann habe ich ein Dictionary Nachfolger, das für jeden Pfeil den Knoten angibt in dem der Pfeil endet.
D.h. wenn ich zwei Blöcke mit einem Pfeil verbinde:
Block 1 hat den Index 1
Der Pfeil hat den Index 2
Block 2 hat den Index 3
dann speichere ich das so:
Vorgänger[1] = 2
Nachfolger[2] = 3
Eine Zuordnung mit Nummern bzw. Indizes und Typen zu den einzelnen Knoten habe ich sogar schon :)
Beitrag zuletzt geändert: 9.3.2010 21:24:22 von projektverwaltung -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage