|
Abstract: Specification, Implementation and Integration of a
Module for Incremental Identifier and Operator Analysis in the PSG
(Programming System Generator)
Jens Herder.
Specification, Implementation and Integration of a Module for
Incremental Identifier and Operator Analysis in the PSG (Programming
System Generator).
Diploma Thesis, Technical University of Darmstadt, 22. February, 1991.
Der Programmier System Generator - PSG - des Fachgebiets Praktische
Informatik in Darmstadt erzeugt aus einer Sprachdefinition eine
sprachspezifische Programmierumgebung. Diese besteht u. a. aus einem
Editor, welcher syntaktische und semantische Fehler von
Programmfragmenten, die nicht vollständig sein müssen, erkennen
kann. Dem Benutzer werden per Menü Fehlerkorrekturen angeboten. Neben
der freien Texteingabe besteht die Möglichkeit, den Text nur mit
Hilfe von Menüs zu verfeinern.
Teil dieses Editors ist die Bezeichneranalyse. Sie dient als
Hilfsmittel für den Benutzer, indem für jede Stelle eines
Programmfragmentes die gültigen Bezeichner ausgegeben werden
können. Die Kontextanalyse setzt die Berechnung auf den von der
Bezeichneranalyse erzeugten Daten auf, um semantische Fehler zu
erkennen.
Die bis zu dieser Arbeit verwendete Bezeichneranalyse im PSG
unterstützt nur einfache Sprachkonzepte (z. B. Fortran und
Pascal). Die Gültigkeitskonzepte der Bezeichner von
weiterentwickelten Sprachen (z. B. Modula-2, CHILL, Ada oder
Pascal-XT) sind nicht vollständig modellierbar.
Wir stellen ein neues Konzept zur Definition und Berechnung der
Bezeichneranalyse vor, das alle uns bekannten Sprachen mit statischer
Typbindung unterstützt. Hierfür haben wir die Sprache BIS -
Bezeichneridentifikationssprache - definiert. Die Methode ist verwandt
mid dem Zwischencode für geordnete Attributierte Grammatiken. Für
jeden Knoten des Abstrakten Syntaxbaumes wird mit Hilfe von BIS ein
Code für eine abstrakte Maschine, welche die Bezeichneranalyse
durchführt, geschrieben. Im Gegensatz zu herkömlichen Methoden
(verkettete Symboltabellen) wird für jeden Punkt innerhalb eines
Programmes for der Anfrage durch den Benutzer oder der Kontextanalyse
die Menge der gültigen Bezeichner berechnet. Die Kosten für eine
Anfrage sind dadurch minimal.
Diese abstrakte Maschine teilt sich in zwei unabhängige Maschinen
auf, zum einen in die S-Maschine, die die speziellen Operationen der
Bezeichneranalyse durchführt, und zum anderen in die G-Maschine, die
den Datenfluss und die Auswertung steuert. Diese Aufteilung
ermöglicht den Austausch der S-Maschine durch eine andere, welche
neue Anwendungsgebiete erschliesst, z. B. die eines Praeprozessors.
Die G-Maschine arbeitet inkrementell; es werden nur die Codeschablonen
neu ausgewertet, deren geerbten Attribute sich geändert haben. Dazu
müssen die Daten, die in einer Codeschablone hinein- und
hinausfliessen, abgelegt werden. Dies ergibt bei grossen
Programmfragmenten eine immense Rechenzeiteinsparung auf Kosten des
Speicherplatzes.
Die Funktionsweise wird an einer kleinen Beispielsprache demonstriert,
die zu Pascal ähnlich ist. Diese besitzt Konstrukte zum Import und
Export von Daten und Datentypen zwischen Programmfragmenten. Im
Prototyp kann die inkrementelle Arbeitsweise abgeschaltet werden und
ermöglicht einen guten Vergleich der Verfahren.
|
|