SDL Integrated Tool Environment

Was ist SITE?

Die Forschungsgruppe "Systemanalyse" des Instituts für Informatik entwickelt Werkzeuge für die Spezifikationssprache SDL.

SDL-Logo Specification and Description Language standardisiert durch die ITU-T (Z.100)

Die SITE-Werkzeuge stellen eine offene Entwicklungsumgebung und Analysekomponenten für SDL mit diversen Erweiterungen, z.B. die Kombination mit ASN.1 oder IDL, bereit. Alle Werkzeugkomponenten sind zumeist einzeln ausführbare Programme. Das gestattet sowohl die voneinander unabhängige Entwicklung der Komponenten, Anpassungen für Kunden, die Integration von Drittanbietern als auch flexible Experimente mit der SDL-Sprachdefinition selbst.

Hauptlinie der Entwicklung sind Compiler-Komponenten für die Zielsprachen C++ und Java ausgehend von SDL/PR (die textuelle Darstellung einer Spezifikation). SITE ist damit eine Ergänzung für (kommerzielle) grafische SDL/GR-Editoren mit SDL/PR-Ausgabe. Die SITE-Compiler-Strecke wird in verschiedenen Projekten zur Generierung von Software für Prototypen aber auch unter Produktionsbedingungen eingesetzt.

Erwähnenswert: SITE realisiert auch einen vollständigen stand-alone X.208-ASN.1-Compiler mit einigen X.690-Erweiterungen und Basic Encoding Unterstützung für C++ und Java.

Zurück zum Anfang

SITE-Technologie

SDL ist eine sehr komplexe Sprache. Deshalb setzen wir in der Compilertechnologie ausschließlich auf Metawerkzeuge. Die wichtigsten Vertreter sind hierbei Flex (lexikalische Analyse), Bison (syntaktische Analyse) und Kimwitu (Verwaltung des Syntaxbaumes). Normalerweise verwenden wir die C-Generierung dieser Metawerkzeuge, in Ausnahmefällen wird auch C++ genutzt. Wegen der guten Konformität des generierten Codes zum C-Standard lassen sich die meisten SITE-Komponenten problemlos auf allen Architekturen mit entsprechenden C-Compilern (insbesondere auch mit Microsoft-Produkten) übersetzen.

Darüberhinaus nutzen wir auch diverse andere frei verfügbare Produkte (perl, gawk) und sowie Eigenentwicklungen, die einerseits den Programmierer unterstützen und andererseits auch eine korrekte Quelltextmanipulation zusichern. Grafische Oberflächen sind zumeist mit Python implementiert, bei der Kommunikation zwischen SITE-Komponenten setzen wir zunehmend auf CORBA.

Zurück zum Anfang

SDL-Compilerkomponenten

Die klassischen Compilerkomponenten sind jeweils einzelne SITE-Komponenten, die sich natürlich in entsprechenden Scripts zu einem SDL-Compiler zusammenfassen lassen. Die von der Syntaxanalyse im Speicher aufgebaute Baumstruktur spielt bei allen SITE-Komponenten eine zentrale Rolle. Die Definition dieser Struktur, Common Representation (CR) genannt, erfolgt mit Hilfe des Metawerkzeugs Kimwitu. Jede SITE-Komponente kennt die CR-Definition (Dateien data_type.kc und osdl.kc) und kann die Speicherstruktur mit automatisch generierten Funktionen in eine Datei abspeichern bzw. aus einer Datei einlesen. Der Codegenerator liest also nur die CR-Datei einer SDL-Spezifikation, deren Konsistenz die Semantikanalyse vorher sichergestellt hat.

Unter Umständen kann die CR auch von einem grafischen SDL-Werkzeug direkt erzeugt werden. Für uns als Universität ist es sicher unrealistisch, einen entsprechenden grafischen SDL-Editor zu bauen.  Um trotzdem mit einer nutzerfreundlichen grafischen Editoroberfläche arbeiten zu können, nutzen wir verschieden Editor-APIs, sofern sie dokumentiert sind. Die Integration für das kommerzielle Werkzeug Cinderella   ist im Rahmen eines Projekts besonders vorangetrieben worden. Entsprechende plugin-Module  für die aktuelle Cinderella-Version werden momentan im praktischen Einsatz getestet.

Mit dem Einsatz von CORBA für einzelne SITE-Komponenten wurde auch über eine universelle Werkzeugschnittstelle nachgedacht. Diese soll den Namen GHOST (Generic Hierachical Object Storage Tool) tragen. Bisher sind die Standard-SITE-Komponenten jedoch nicht mit einer GHOST-Schnittstelle ausgestattet.

Zurück zum Anfang

Andere SITE-Komponenten

Um die Entwicklung der Compilertechnologie in SITE entstanden auch andere Arbeiten, die z.T. als weitere Komponenten existieren. In diesem Sinne ist SITE auch eine offene Entwicklungsumgebung.
Zurück zum Anfang

Entwicklung neuer SITE-Komponenten

Die Entwicklung eigener Komponenten ist mit Hilfe der gut modularisierten Quellen der anderen Komponenten relativ einfach. Zum allgemeinen Verständnis des Zusammenspiels der Komponenten gibt es ein dokumentiertes Beispiel, welches einen EBNF-PrettyPrinter implementiert (Parser, Regelanalyse, Vereinfachung, pretty-Ausgabe als Codegenerierung). Prinzipiell hat eine SITE-Komponente folgenden Aufbau:
CR-Definition
Es gibt zwei Python-basierte Erklärungskomponenten, die den Aufbau der CR als Definition bzw. einer CR-Instanz komfortabel darstellen. Diese binden sich mit einer CR-spezifischen dynamischen Bibliothek an die jeweils gültige CR-Definition. Man kann die Python-Komponente auch zum Debuggen in die Anwendung integrieren. Quellen stellen wir nur auf Anfrage zur Verfügung, da der Autor an Hand dieser Programme Python erlernt hat. Natürlich ist auch der SDL-PrettyPrinter ein willkommenes Entwicklerwerkzeug.
CR-Ein- und Ausgabe
Zur Verwaltung und insbesondere die Erkennung von nicht kompatiblen CR-Versionen nutzen wir die generierten Kimwitu-Funktionen nicht direkt. Die Datei cr_io.k der Semantikanalyse sollte für die meisten Zwecke ausreichend sein.
Optionsverwaltung
Alle SITE-Komponenten besitzen eine relativ einheitliche Struktur was Programmoptionen angeht. Man sollte eine Vorgabe aus vorhandenen Komponenten nutzen und nicht das Rad neu erfinden.
Fehlerausgaben
Das System zur Fehlerausgabe ist sehr komfortabel. Teilkomponenten der CR-Instanz können mit entsprechenden Formatstrings (analog printf) an Fehlerfunktionen übergeben werden, die für eine ordentlich formatierte Ausgabe sorgen. Bei der Positionsbestimmung des Fehlers hat man die Wahl zwischen der Dateiposition (für den direkten Blick ins SDL/PR) oder einer etwas ungenaueren Strukturdarstellung (für grafische Editoren gedacht und prinzipiell auch zur Positionierung nutzbar).  In Cinderella werden SITE-Fehlermeldungen der grafischen Oberfläche übergeben.
Programmtests
Kimwitu ist an sich schon mit diversen automatischen Programmtests ausgestattet. Mit unserer modifizierten Version lassen sich jedoch auch eine dynamisch aktivierbare Ablaufverfolgung für den rekursiven Abstieg im CR-Baum und Funktionsrufe realisieren. Folgt man noch unseren Programmierempfehlungen, so sind stabile Werkzeuge schnell realisiert.
Funktionalität
Das, was die SITE-Komponente ausmacht, sollte schon selbst bereitgestellt werden. Man hat aber die Wahl, auf weitere Module anderer Komponenten zuzugreifen, beispielsweise die sehr komplexe Auflösung von Bezeichnern. Die einfache Funktionalität eines PrettyPrinters für SDL lief nach etwa einer Woche (Autor war allerdings SDL- und SITE-Experte) als Programm stabil.
Syntaxänderungen
Man sollte sich sehr genau überlegen, ob es gut ist, die Syntax von SDL zu modifizieren, da die Standardkonformität verloren geht. Bei der Änderung der Grammatik ist es empfehlenswert, sich mit der nicht öffentlich bereitgestellten Technologie zur Manipulation der Bison-Quellen auseinandersetzen. Man vermeidet mit Nachfragen viele Fehler und Arbeit! Syntaktische Einschränkungen sind dagegen kein Problem. Erreicht man einen Knoten der CR, der nicht unterstützt werden soll, dann reicht eine Fehlermeldung in der Anwenderkomponente meist aus.
Zurück zum Anfang

Verfügbarkeit

Unter Beachtung der Lizenzvereinbahrung sind die folgenden Werkzeuge mit Quellcode verfügbar: Ausführbare Programme für verschiedene Architekturen können von unserem ftp-Server heruntergeladen werden. Für weitere technische Informationen kontakten Sie bitte das Entwicklerteam.

Andere Komponenten gehören zu internen Forschungsprojekten (Studien- oder Diplomarbeiten) bzw. sind an Projektpartner gebunden. Diese Komponenten sind aus Gründen der Stabilität, der ungenügenden Dokumentation oder der projektspezifischen Lizensierung nicht veröffentlicht.

Zurück zum Anfang

erstellt am 15-Mai-1997 von SITE-Wartungscrew
letzte Änderung am Fre Jun 27 11:27:26 CEST 2003