Universität Bremen  
  FB 3 AG BKB  
  B. Hoffmann > Diplomarbeiten > Deutsch
English
 

Eine Werkbank für Syntaxanalyse

 

Eine Diplomarbeit von Michael Stache (2000)

Bei der Implementierung einer Programmiersprache mit einem Übersetzer oder Interpreter kommt der Syntaxanalyse eine zentrale Rolle zu. In dieser Implementierungsphase wird der Programmtext auf syntaktische Fehler untersucht und in eine interne Darstellung umgewandelt, die abstrakte Syntax genannt wird und meist als eine rekursive baumartige Datenstruktur implementiert wird. Viele nachfolgenden Phasen der Implementierung arbeiten auf der abstrakten Syntax. Diese Datenstruktur muß also besonders sorgfältig entworfen werden.

Das Untersuchen des Programmtextes selbst kann weitgehend automatisiert werden, wenn man einen der vielen Parsergeneratoren benutzt, die aus der syntaktischen Beschreibung einer Sprache Programme erzeugen können, die Programmtexte auf Syntaxfehler untersuchen. Dazu muß die syntaktische Beschreibung harten Anforderungen genügen (wie LARLR(1) oder SLL(1)), was die vorgegebene Beschreibung einer Sprache leider meistens nicht tut. Zur Entwicklung der Syntaxanalyse sind deshalb meistens einige Schritte zu tun:

  • Ausgangspunkt ist die Referenzsyntax der Sprache, die in der Sprachdefinition gegeben ist. Meist ist wird schon präzise mit einer kontextfreie Grammatik (oder mit Syntaxdiagrammen) angegeben.
  • Aus der Referenzsyntax muß eine konkrete Syntax entwickelt werden, die von einem Parsergenertor akzeptiert werden kann. Dazu wird die Referenzsyntax verändert, ohne die damit beschriebene Sprache selbst zu ändern (durch spracherhaltende Transformationen wie Faktorisierung).
  • Aus der konkreten muß die abstrakte Syntax entwickelt werden. Das geschieht durch Vereinfachung der Referenzsyntax, indem semantisch gleichbedeutende Schreibweisen zu einer zusammengefaßt werden. (diese Transformationen erhalten in der Regel nicht die Sprache!)
  • schließlich muß für jede Regel der konkreten Syntax angegeben werden, wie der ihr entsprechende Baum der abstrakten Syntax aufgebaut werden muß.

Aufgabe

Es soll ein interaktives Werkzeug entwickelt werden, mit dem
  • die Referenzsyntax einer Sprache editiert werden kann,
  • die Referenzsyntax in eine konkrete Syntax transformiert werden kann,
  • die Referenzsyntax in eine abstrakte Syntax transformiert werden kann, so daß
  • Aktionen zum Aufbau abstrakter Bäume für die Implementierungssyntax automatisch erzeugt werden.
So ein Werkzeug kann mit dem Synthesizer Generator der Cornell University entwickelt werden; es sollte eine vollständige Spezifikation der Syntaxanalyse für einen Parsergenerators wie yacc erzeugen. (Spezifikationen für weitere Parsergeneratoren können dann leicht ergänzt werden).

Literatur

Thomas Reps, Tim Teitelbaum (1988). The Synthesizer Generator. Springer Monographs in Computer Science.
 
   
Autor: Dr. Berthold Hoffmann
 
   
Zuletzt geändert am: 18. Oktober 2004