Skip to main content

1986 | Buch

Grundlagen der Programmiersprachen

verfasst von: Prof. Dr.-Ing. Jacques Loeckx, Prof. Kurt Mehlhorn, Ph. D., Prof. Dr. rer. nat. Reinhard Wilhelm

Verlag: Vieweg+Teubner Verlag

Buchreihe : Leitfäden und Monographien der Informatik

insite
SUCHEN

Über dieses Buch

Dieses Buch behandelt Grundlagen von Programmiersprachen, deren Verknüpfung mit realen Rechenmaschinen und - exemplarisch - Algorithmen. Das Ziel des Buches ist es, eine solide Basis für das Studium der Informatik zu legen. Es ist ins­ besondere für Studenten im Grundstudium des Studienganges Informatik gedacht. Ein Programm ist nur dann brauchbar, wenn es das gestellte Problem korrekt löst, und dies darüber hinaus mit der gewünschten Effizienz tut. Aussagen über die Korrektheit und Effizienz eines Programms sind nur dann möglich, wenn die verwendete Programmiersprache exakt definiert ist, d.h., wenn die Menge der Pro­ gramme (Syntax) und deren Bedeutung (Semantik) festliegen. Die Definition von Syntax und Semantik nimmt daher in diesem Buch einen wichtigen Platz ein. For­ male Definitionen werden erst dann lebendig, wenn sie auf einem guten intuitiven Verständnis aufbauen, und wenn sie zu Folgerungen in der Form von Sätzen führen. Daher enthält dieses Buch eine große Anzahl von Beispielen, Sätzen und Aufgaben. Die Grundlagen der Programmiersprachen werden eingeführt anhand einer spezifischen Programmiersprache, PROSA genannt (PROgrammiersprache SAar­ brücken). PROSA ist der Programmiersprache Pascal sehr ähnlich, weicht aber in einigen Punkten (z.B. dynamische Felder, geschachtelte Verbunde) aus didaktischen Gründen ab. Die Abweichungen dienen zum einen der Vereinfachung, und zum an­ deren der lllustration einiger Konzepte, die Pascal nicht kennt. Die Benutzung von Pascal in einem begleitenden Programmierpraktikum stellt aber keinerlei Problem dar.

Inhaltsverzeichnis

Frontmatter
Einleitung
Zusammenfassung
Die Programmiersprache ist das wichtigste Werkzeug des Programmierers, des Softwareentwicklers. In ihr beschreibt er erstens die Objekte, mit denen sein Programm arbeiten soll, also z.B. ganze Zahlen, Zeichenfolgen, Sammlungen solcher Objekte, oder Dateien. Außerdem formuliert er in ihr die Rechenvorschriften auf diesen Objekten, z.B. die Berechnung einer Raketenbahn, die Buchung eines Geldbetrages auf der Kontodatei einer Bank oder das Sortieren der Einträge der Kontendatei in alphabetischer Reihenfolge der Namen. Dazu legt er in der Programmiersprache fest, wie verschiedene Programme in einem — möglicherweise sehr komplexen — Gesamtsystem kooperieren. Das Kontoführungsprogramm einer Bank etwa kommuniziert über geeignete Datenfernverarbeitungsprogramme mit ähnlichen Programmen in anderen Banken, um eingehende und hinausgehende Überweisungen zu registrieren.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel I. Die formalen Grundlagen
Zusammenfassung
In diesem Kapitel legen wir das Fundament. Wir führen zunächst die Begriffe Relation und Funktion ein; dabei betrachten wir partielle Funktionen als den “Normalfall”. Der Abschnitt 1.3 ist den Worten (d.h. Zeichenreihen) gewidmet. In Abschnitt 1.4 behandeln wir dann ausführlich kontextfreie Grammatiken als Mittel zur Definition der Syntax formaler Sprachen. Die Semantik formaler Sprachen ist dann der Gegenstand der Abschnitte 1.5 (rekursiv definierte Funktionen), 1.6 (attributierte Grammatiken) und 1.7 (mathematische Maschinen). Etwas präziser: da die Sätze einer durch eine Grammatik definierten formalen Sprache eine Struktur besitzen, liegt es nahe, diese Struktur zur Definition der Semantik auszunutzen. Die dafür benutzten Methoden werden in den Abschnitten 1.5 und 1.6 bereitgestellt. Den alternativen algorithmischen Zugang behandeln wir dann in Abschnitt 1.7.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel II. Ausdrücke
Zusammenfassung
In diesem Kapitel behandeln wir arithmetische Ausdrücke wie etwa a1 + a2 × a3. Wir gehen dabei nicht nur auf klassische Notationen ein, die aus der Elementarmathematik bekannt sind, sondern auch auf Sonderformen — wie z.B. vollständig geklammerte Ausdrücke, klammerfreie Notation —, die der maschinellen Verarbeitung besonders angepaßt sind.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel III. PROSA, eine einfache Programmiersprache
Zusammenfassung
In diesem Kapitel beginnen wir mit der Beschreibung der Programmiersprache PROSA (Programmiersprache Saarbrücken), und führen an Hand von PROSA die grundlegenden Konzepte ALGOL-ähnlicher höherer Programmiersprachen ein. Ferner illustrieren wir PROSA an mehreren nichttrivialen Beispielen und geben so dem Leser einen ersten Eindruck von algorithmischem Problemlösen.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel IV. Datenstrukturen
Zusammenfassung
Die fünf bisher in PROSA bekannten Typen (int, real, bool, char, string) hatten wir “elementar” genannt; in diesem Kapitel führen wir komplexe Datentypen, nämlich Felder und Verbunde, und Zeigervariable ein. Ein Feld (array, row) ist eine Zusammenfassung von mehreren Variablen des gleichen Typs, ein Verbund (record, structure) ist eine Zusammenfassung von mehreren Variablen beliebigen Typs. Die Zeiger sind eine neue Menge von Variablen; eine Zeigervariable kann als Wert einen Verbund annehmen. Diese neuen Konstrukte steigern die Ausdruckskraft von PROSA wesentlich. Denn ein Mathematiker würde wohl kaum ein Programm zur Lösung eines Gleichungssystems A · x = b in einer Sprache schreiben, die ihm den Datentypen Feld nicht anbieten würde. Erst mithilfe dieses Typs kann er die Matrix A der Koeffizienten und die Vektoren x und b deklarieren und benutzen. Verbunde zusammen mit Zeigern erlauben den Aufbau großer Geflechte, etwa die für effizientes Suchen geeignete Abspeicherung von großen Datenmengen in ”geordneten” Bäumen. Insbesondere kann ein Programm nach Bedarf, z.B. je nach Länge der Eingabe neue Verbundobjekte kreieren. Im bisherigen PROSA ist die Anzahl der Variablen, mit denen ein Programm arbeiten kann, aus dem Deklarationsteil ersichtlich und damit fest.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel V. Übersetzung von PROSA nach RESA, Teil 1
Zusammenfassung
Höhere Programmiersprachen wie etwa Pascal und PROSA dienen der Formulierung von Algorithmen durch den (menschlichen) Programmierer. Programme in höheren Programmiersprachen sind deshalb leicht lesbar (oder zumindest sollten sie es sein!). Sie können allerdings nicht direkt durch einen Rechner ausgeführt werden. Man könnte sogar sinnvoll die „Höhe“ einer Programmiersprache als den „Abstand“ der Sprache von der Maschinensprache eines typischen Rechners definieren; Programme in höheren Programmiersprachen müssen also in die Maschinensprache des Rechners übersetzt werden, bevor sie von diesem Rechner ausgeführt werden können. In diesem Kapitel wird ein einfacher Rechner RESA (REchner SAarbrücken) und seine Maschinensprache eingeführt und gezeigt, wie man PROSA-Programme in RESA-Programme übersetzen kann.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel VI. Prozeduren
Zusammenfassung
Wenn ein Programm für eine nichttriviale Anwendung und in einer realistischen Größenordnung (ein paar hundert Seiten) mit den bisherigen Sprachkonzepten von PROSA geschrieben werden müßte, gäbe es große Schwierigkeiten. Da man annehmen kann, daß an einem solchen Programm mehrere Programmierer beteiligt sein würden, muß eine vernünftige Aufteilung des Problems und des Programms gefunden werden; denn ebensowenig, wie sieben Werkzeugmacher, die gleichzeitig an einem Werkstück feilen, ein brauchbares Produkt erstellen, werden sieben Programmierer, die zusammen eine Schleife programmieren, damit den gewünschten Effekt erzielen. Eine vernünftige Strukturierung eines Programms in überschaubare Teile ist aber im bisher vorgestellten PROSA kaum möglich. Insbesondere sind alle deklarierten Namen überall im Anweisungsteil gültig, und überall dort ist der Inhalt der von ihnen bezeichneten Variablen lesbar und veränderbar.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel VII. Übersetzung von PROSA nach RESA, Teil 2
Zusammenfassung
In diesem Kapitel beschreiben wir die Übersetzung von PROSA mit Prozeduren nach RESA. Für PROSA-Programme ohne Prozeduren haben wir die Übersetzung schon in Kapitel V diskutiert. Es kommen nun gegenüber Kapitel V zwei neue Probleme hinzu:
1)
Prozeduren erlauben eine sehr flexible Kontrollstruktur;
 
2)
Prozeduren erzwingen eine aufwendigere Speicherverwaltung.
 
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Kapitel VIII. Spracherweiterungen
Zusammenfassung
Das Ziel dieses Kapitels ist es, einige weitere Sprachkonzepte kurz anzudeuten. Im Gegensatz zu den vorigen Kapiteln verzichten wir dabei bewußt auf eine vollständige, geschweige formale Beschreibung. Für mehr Details wird der Leser auf die weiterführende Literatur verwiesen.
Jacques Loeckx, Kurt Mehlhorn, Reinhard Wilhelm
Backmatter
Metadaten
Titel
Grundlagen der Programmiersprachen
verfasst von
Prof. Dr.-Ing. Jacques Loeckx
Prof. Kurt Mehlhorn, Ph. D.
Prof. Dr. rer. nat. Reinhard Wilhelm
Copyright-Jahr
1986
Verlag
Vieweg+Teubner Verlag
Electronic ISBN
978-3-322-94706-2
Print ISBN
978-3-519-02254-1
DOI
https://doi.org/10.1007/978-3-322-94706-2