1unitedpower: Demo: JavaScript und Binärdateien, Multimedia

Beitrag lesen

Und das Ganze nun mit einer abstrakten Denkweise ergänzen: So ist auch Text nur eine Bytesequenz. Oder anders ausgedrückt: Ein Parser liest nicht nur Text sondern Bytesequenzen.

Du sagst "Abstraktion" und meinst damit genau das Gegenteil. Grammatiken, Token, Syntaxbäume sind doch bereits im mathematischen Sinne abstrakte Objekte. Bytesequenzen dagegen liegen auf der imaginären Strecke zwischen "Abstraktion" und "Realisierung" am anderen Ende. Für die Entwicklung eines Parsers lassen durch Argumentation auf Byteebene keine zusätzlichen Erkenntnisse gewinnen (außer vielleicht Mikro-Optimierungen). Die wirklichen™ Probleme, die sich bei der Entwicklung eines Parsers stellen, sind völlig anderer Natur. Typische Fragen sind dabei: Ist die Grammatik eindeutig? D.h. gibt es zu einer Eingabe überhaupt einen eindeutigen Ableitungsbaum? Oder gibt es vielleicht Mehrdeutigkeiten? Wie gehe ich überhaupt vor: Baue ich eine Links-Ableitung oder Rechts-Ableitung auf? Leite ich bottom-up oder top-down ab? Wieviel Lookahead benötigt der Parser für eine gegebene Grammatik mit der jeweiligen Methode? Selbst für die Implementierung spielen Bits und Bytes noch keine Rolle: Man gibt sich damit zufrieden einen abstraken Automaten anzugeben, der das Wortproblem für die Grammatik lösen kann. Diese Automaten dann in ausführbaren Code zu transformieren ist nur ein kleiner Schritt. Und wie ich bereits angedeutet habe, ist es möglich Parser voll automatisch von Parser-Generatoren erzeugen zu lassen. Falls du an den theoretischen Grundlagen interessiert sein solltest, kann ich dir die erste Hälfte unserer Compilerbau-Vorlesung sehr empfehlen.