Autor Beitrag
AndreasT.
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 14.01.08 09:50 
Hallo,

Vielleicht habt Ihr ja mal ein paar Tipps für mich.

Problemstellung:
Ich habe einen umfangreichen Record der sich in weiteren Recors udn variablen untergliedert.

Nun möchte ich den Record auf seine Variablen hin durchsuchen lassen und im Falle eines weiteren Records wieder die Variablen/Records dessen prüfen lassen.
Bis ich jede Variable mit Typ und Name identifiziert habe.

Danach will ich sie nicht nur identifizieren sondern auch speichern in einer dem VariableTyp geeigneter Form.

Hat jemand eine Idee ob es das fertig gibt?

Gruss
Andreas T.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 14.01.08 16:04 
:welcome:

öhm...könntest du am besten mal das record (oder das problem an sich) zeigen? So hab ich Probleme, da etwas zu sagen.

Grundsätzlich hört sich das für mich eher nach 2 Schleifen, als nach rekursiv an :nixweiss:

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 14.01.08 17:26 
Ich habe sowas schon öfter mal gemacht. Früher war ich auch immer mehr der Held der alles ohne Rekursion lößen wollte.
Aber es geht auch Rekursive.
Und zwar einfacher als mit Schleifen (wobei eine Schleife reichen dürfte)
Die Idee beim rekursiven Ansatz ist, das man immer wenn man beim Parsen des Quelltextes an eine bestimmte Stelle kommt, also ein bestimmtes Symbol [RECORD] findet, den Parser erneut aufruft, aber eben mit einer anderen Startposition.
Also ist der erste Aufruf (Eingabestring an Position 0). Ein folgender rekursiver Aufruf lautet dann (Eingabestring an Position nach Symbol)
Dabei ist es sogar möglich das der eingabestring keine lokale Variable des Parsers sein muss. Das entlastet den Stack.
Lediglich die Startposition muss der Parser übergeben bekommen, also die Position im String ab der er suchen soll)
Die Abbruchbedingung für eine Ebene ist das ein Endesymbol [END]. Ab da setzt dann wieder die vorherige Ebene des Parsers fort.
Das schreiben der gefundenen Informationen kann dabei einfach linear nacheinander erfolgen und zwar aus jeder Ebene des Parsers heraus, in eine Datenstuktur die sich nicht im Parser selber befindet.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 14.01.08 17:37 
user profile iconSinspin hat folgendes geschrieben:

Das entlastet den Stack.

Deshalb mag ich keine rekursiven Sachen (falls die Datenmengen beliebig groß sind. Beim Kartenfärber (Paranuss-Rätsel) hab ich dazu eine Queue benutzt, das funktioniert auch prima

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 14.01.08 18:07 
Bei der von mir beschriebenen Variante landet aber nicht viel auf dem Stack. Und bei der nicht Rekursiven Lösung muss man sich einiges mehr an Arbeit machen, was so durch die Rekursion für einen Übernimmt.
Vom Speicheraufwand sind daher beide Varianten gleich.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?