Crosscompiler from Modula-2 to PL/M

Research output: Types of ThesesMaster's Thesis / Diploma Thesis

Abstract

Am Institut für Informatik der Johannes-Kepler-Universität gibt es ein Mikrocomputersystem mit einem 8080-Mikroprozessor. Dafür stand bisher unter anderem ein PL/M-80-Compiler zur Verfügung. Fast die gesamte Software wurde damit entwickelt. PL/M-80 ist schon alt und deckt nicht mehr Am Institut für Informatik der Johannes-Kepler-Universität gibt es ein Mikrocomputersystem mit einem 8080-Mikroprozessor. Dafür stand bisher unter anderem ein PL/M-80-Compiler zur Verfügung. Fast die gesamte Software wurde damit entwickelt. Um diesen Zustand zu beseitigen, soll Modula-2 auf dem INTEL-Entwicklungssystem zur Verfügung gestellt werden, in Form eines Cross-Compilers von Modula-2 nach PL/M-80. Um festzustellen, worin sich diese beiden Programmiersprachen unterscheiden, und um beurteilen zu können, welche Eigenschaften von Modula-2 sich problemlos in PL/M-80 abbilden lassen, bei welchen es wahrscheinlich Schwierigkeiten geben wird, und welche aller Voraussicht nach nicht oder nur mit erheblichem Aufwand zu übersetzen sind, mußte ein Sprachvergleich durchgeführt werden. Aus diesen Erkenntnissen, wurde im Anschluß eine Sprachdefinition erstellt, um eine geeignete Teilmenge von Modula-2 festzulegen, die sich mit vertretbarem Aufwand nach PL/M-80 übersetzen läßt. Die neue Sprache heißt Modula/M-80. Für die Implementierung stand ein Personal-Computer mit MS-DOS zur Verfügung. Als Programmiersprache wurde Modula-2 gewählt. Aus der attributierten Grammatik wurden mit der Modula-2-Version des Compiler-Generators Coco die wesentlichen Teile des Cross-Compilers erzeugt: ein tabellengesteuerter Syntaxanalysator und ein Semantikauswertemodul. Neben den von Coco generierten Moduln sind noch einige weitere Programmteile nötig: ein Modul, das die lexikalische Analyse des Modula/M-80-Quelltexts übernimmt, sowie Moduln, welche die wesentlichen Datenstrukturen des Compilers, wie etwa die Symboltabelle und die Namensliste, verwalten und entsprechende Zugriffsprozeduren bereitstellen. Diese von Hand zu codierenden Teile wurden in Modula-2, und zwar nur in jener Untermenge von Modula-2, die vom Cross-Compiler zu übersetzen ist, in Modula/M-80 also, implementiert. Die neue Sprache bringt wesentliche Verbesserungen gegenüber PL/M-80. Es gibt wie in Modula-2 eine Trennung von Definitions- und Implementierungsteil eines Moduls. Die Verträglichkeit der intermodularen Schnittstellen wird durch ein effizientes statisches und dynamisches Versionsprüfungsverfahren garantiert. Strenge Typenprüfungen gewährleisten, daß bereits zur Übersetzungszeit möglichst viele Programmierfehler erkannt werden können. Es gibt das Konzept der Datenabstraktion durch benutzerdefinierbare Datentypen, was zu einem enormen Anstieg des Dokumentationswerts von Modula/M-80-Programmen im Vergleich zu PL/M-80-Programmen führt. Neben den bereits genannten Eigenschaften hat Modula/M-80 mächtigere Anweisungen und viel flexiblere Möglichkeiten bei der Parameterübergabe in Prozedur - und Funktionsaufrufen als PL/M-80. Natürlich konnten nicht alle Eigenschaften von Modula-2 in die neue Sprache aufgenommen werden. So kennt Modula/M-80 zum Beispiel keine INTEGER-, REAL- und Prozedur-Typen, außerdem sind bei der Deklaration von RECORD- und ARRAY-Typen gewisse Einschränkungen zu beachten. Weiters dürfen Prozeduren nicht rekursiv aufgerufen werden, Modulschachtelung ist verboten und es gibt kein Coroutinenkonzept wie in Modula-2. Der hier implementierte Cross-Compiler ist ein Einpaßcompiler, der keinerlei Zwischensprache aufbaut. Daß es sich dabei um ein sehr leistungsfähiges und schnelles Werkzeug handelt, läßt sich wohl eindrucksvoll mit folgenden Angaben belegen: Der Cross-Compiler kann sich bei einer Gesamtgröße von etwa 5.000 Quelltextzeilen in weniger als fünf Minuten selbst nach PL/M-80 übersetzen.
Translated title of the contributionCrosscompiler from Modula-2 to PL/M
Original languageGerman
Publisher
Publication statusPublished - 1986

Cite this