Unterschiedliche Methoden zum Auswerten von Daten

shreyder

Grünschnabel
Hallo Leute,

ich mache mir seit einiger Zeit darüber Gedanken, welche verschiedenen Methoden es zum Verarbeiten, Auswerten oder Parsen, bezeichnet es wie ihr es wollt, von Daten gibt. Mit Daten meine ich nicht einfache Strings, bei denen man nach einem Trennzeichen sucht und sie dann zerteilt, sondern wesentlich komplexere Strukturen wie Quelltexte von Programmiersprachen, Mails und ähnlichem. Vielleicht kennt jemand ein paar Artikel oder Arbeiten zu diesem Thema.

Um meine Fragestellung etwas leichter verständlich zu machen, zeige ich mal was ich unter einer solchen Methode oder Herangehensweise verstehe, indem ich eine erkläre.
Ich nenne sie einfach mal sequenzielle Methode. Als Beispiel nehme ich mal C-Quelltexte, um das ganze etwas realitätsbezogener zu gestalten, obwohl es mir bei meiner Frage eher um die Theorie geht. Die Methode funktioniert folgendermaßen:

Man unterteilt die Datenstruktur gedanklich in sog. Kontexte. Ein Kontext in einem C-Quelltext wäre zum Beispiel ein Kommentar, ein Funktionskörper, eine Anweisung. Diese Kontexte sind ineinander verschachtelt, z.B. ist die gesamte C-Quelltext-Datei der Seiten-Kontext, in ihm sind Kommentar-Kontexte und Funktions-Kontexte, diese enthalten Anweisungs-Kontexte, etc.
Der Parser arbeitet die Datei nun Zeichen für Zeichen ab und stellt anhand des aktuell eingelesenen Zeichens fest in welchem Kontext er sich befindet. Er startet im Seiten-Kontext, wenn er auf ein '/' trifft wechselt er den Kontext zum Kommentar-Kontext, oder wenn er auf ein '{' trifft in einen Anweisungsblock-Kontext, natürlich muss auch berücksichtigt werden, dass ein Zeichen nicht immer ausreicht um festzustellen in welchem Kontext man ist. Der Schrägstrich / kann mit einem Stern * einen Blockkommentar einleiten, aber auch eine Escape-Sequenz darstellen. Der Parser kann das eingelesene Zeichen nun einem Kontext zu ordnen und in einer speziellen Variable speichern, so dass man am Ende ein Array aus Kommentaren, eines Funktionen, etc haben könnte, je nachdem was der Parser damit machen soll.
Der Vorteil bei dieser Methode im Gegensatz zu Regulären Ausdrücken beispielsweise ist, dass man die Datei nur einmal komplett einlesen braucht und auch nur einmal durchgeht. Natürlich ist die Implementierung etwas zeitaufwendig und bei Änderungen der Synthax müsste man tiefer eingreifen. Aber ich will hier auch nicht diese Methode vorstellen, sondern euch fragen, ob ihr weitere solcher Methoden kennt, bzw. ob ihr ein paar Links zu Arbeiten, Artikeln, Vergleichen usw. zu diesem Thema kennt. Meine Google-Suche war nicht sehr ertragreich.

Mit freundlichen Grüßen,
shreyder
 

Neue Beiträge

Zurück