Eines meiner Lieblingsthemen ist die Verarbeitung von textueller Sprache durch Computerprogramme. Als ich mit etwa elf Jahren meine ersten kleinen Gehversuche in der Programmiersprache
BASIC auf meinem guten alten
Commodore Amiga 500 machte, waren da auch immer wieder Anwendungen darunter, welche in bester
"Eliza"-Manier einen schlauen, künstlichen Gesprächspartner vorgaukelten. Man konnte Sätze eingeben, die Sätze wurden dann nach einfachsten Regeln nach gewissen Schlagwörtern untersucht und aus einem riesigen Fundus fest einprogrammierter Daten gabs dann passend formulierte Antworten.
Wenige Jahre später entwickelte ich eine große Faszination für Programmiersprachen. Mein Traum war es, eine eigene, maßgeschneiderte Programmiersprache zu entwickeln und entsprechend einen Compiler zu bauen. Nach anfänglichen naiven Fehlversuchen, welche hoffnungslos in
Spaghetti-Code mündeten, arbeitete ich mich irgendwann in offenen Quellcode bestehender Compiler ein, was damals noch, als das Internet für viele ein Fremdwort war, recht exotisch und eher schlecht zugänglich war.
Jahre später ist mir, nach Lektüre der sogenannten
"Drachenbücher" und diverser Online-Materialien, das Vorhaben, einen eigenen Compiler zu basteln auch mit einer objektorientierten Skriptsprache, die syntaktisch zwischen Java und JavaScript herumlungerte, endlich geglückt.
Mittlerweile habe ich das gesammelte Wissen mehrfach in Interpretern eingesetzt, und generell sind die Kenntnisse sehr praktisch, wenn es darum geht, textuelle Eingaben zu analysieren und zu interpretieren.
In diesem Artikel möchte ich zunächst eine kleine Übersicht zum Compilerbau geben, und daraufhin erklären, welche Ansätze es gibt, einen sogenannten Parser von Hand zu basteln. Hierbei handelt es sich um eine Compiler-Komponente, welche für die Syntaxanalyse der textuellen Eingabe zuständig ist.