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?