Inhaltsverzeichnis: 1. Einleitung. 2. Grundbegriffe. 3. Übersicht über den Aufbau eines Computers. 4. Programmierhilfen und Programmiersysteme. 5. Einfache Beispiele von Programmen. 6. Endlichkeit von Programmen. 7. Lineare Notation, Programmiersprachen: 7.1. Übersicht, 7.2. Ausdrücke und Anweisungen, 7.3. Einfache Programme in linearer Notation. 8. Datentypen: 8.1. Boolean, 8.2. Integer, 8.3. Char, 8.4. Real. 9. Programme mit Rekursionsrelationen: 9.1. Folgen, 9.2. Reihen. 10. Die Strukturart „File“: 10.1. Begriff des Files, 10.2. Generierung eines Files, 10.3. Inspektion eines Files, 10.4. Text-Files. 11. Die Strukturart „Array“. 12. Unterprogramme — Prozeduren und Funktionen: 12.1. Konzept und Terminologie, 12.2. Lokale Größen, 12.3. Prozedur-Parameter, 12.4. Parametrische Prozeduren und Funktionen. 13. Transformationen von Zahlendarstellungen: 13.1. Eingabe von positiven ganzen Zahlen in dezimaler Darstellung, 13.2. Ausgabe von positiven ganzen Zahlen in dezimaler Darstellung, 13.3. Ausgabe von gebrochenen Zahlen in dezimaler Darstellung, 13.4. Transformation von Gleitkomma-Darstellungen. 14. Textverarbeitung mit Array- und File-Strukturen: 14.1. Begrenzung der Zeilenlänge in einem Text-File, 14.2. Editieren einer Textzeile, 14.3. Erkennen von regulären Zeichenmustern. 15. Schrittweise Programmentwicklung: 15.1. Lösung eines linearen Gleichungssystems, 15.2. Ermittlung der kleinsten Zahl als Summe von zwei dritten Potenzen
Niklaus Wirth Bücher







Compiler sind mehr als komplexe Programme, deren Herstellung einigen wenigen, großen Firmen vorbehalten bleibt. Sie spielen gewissermaßen die Rolle der Brücke zwischen Software und Programmiersprache einerseits und Hardware und Rechnerarchitektur andererseits. Deshalb ist das Verständnis ihrer Prinzipien und ihrer Struktur für jeden Informatiker wesentlich. Dieses Buch ist aus der Erfahrung erwachsen, dass neue Lehrstoffe nur dann haften bleiben, wenn sich der Leser auch praktisch mit der Materie befasst. Hier ist das zentrale Anliegen daher der Bau eines kompletten Compilers einer einsatzfähigen Programmiersprache und dessen Darlegung in allen Einzelheiten. Dazu wird aufgrund ihres systematischen Aufbaus eine substantielle Untermenge der Sprache Oberon gewählt und als Zielrechner eine RISC-Architektur, wobei beiden exemplarischer Charakter zukommt.
In den vergangenen Jahren wurde die Programmierung wm Rechenanlagen als diejenige Disziplin erkannt, deren Beherrschung grundlegend und entscheidend fur den Erfolg vieler Entwicklungsprojekte ist und die wissenschaftlicher Behandlung und Darlegung zuganglich ist Vom Handwerk stieg sie zur akademischen Disziplin auf.
Inhaltsverzeichnis0. Einleitung.1. Definition und Struktur formaler Sprachen.2. Satzanalyse.3. Syntax Graphen.4. Aufbau eines Parsers für eine gegebene Syntax.5. Tabellen-gesteuerte Syntax Analyse.6. Die Übersetzung von BNF-Produktionen in Tabellen.7. Die Programmiersprache PL/0.8. Ein Parser für PL/0.9. Die Behandlung von syntaktischen Fehlern.10. Ein Interpreter für PL/0.11. Die Erzeugung von Befehls-Code.12. Eine Spracherweiterung: Prozesse.13. Technik der Compilerentwicklung und -Übertragung.14. Aufgabensammlung.Literaturhinweise.Anhang: Der ASCII Zeichensatz.Stichwortverzeichnis.
Der moderne Digital-Computer wurde entwickelt, um komplexe und zeitaufwändige Berechnungen zu erleichtern und zu beschleunigen. Bei den meisten Anwendungen ist seine Fähigkeit, große Mengen an Informationen zu speichern und zugänglich zu machen, entscheidend; die Rechenleistung spielt oft eine untergeordnete Rolle. In diesen Fällen stellt die verarbeitete Informationsmenge eine Abstraktion eines Teils der realen Welt dar. Die Informationen, die der Rechenanlage zur Verfügung stehen, bestehen aus einer ausgewählten Menge von Daten, die für das aktuelle Problem als relevant erachtet werden. Diese Daten repräsentieren eine Abstraktion der Realität, da unwichtige Eigenschaften und Details der Objekte unberücksichtigt bleiben. Eine Abstraktion ist somit auch eine Vereinfachung der Tatsachen. Ein Beispiel ist die Personalkartei eines Arbeitgebers, in der jeder Angestellte durch eine Menge von für den Arbeitgeber relevante Daten repräsentiert wird, wie Name und Gehalt. Unwichtige Informationen wie Haarfarbe, Gewicht und Größe werden in diesem Kontext wahrscheinlich nicht erfasst.
Die Sprache sollte in einer einzigen höheren Programmiersprache programmiert werden, die den Anforderungen des Systementwurfs auf hoher Ebene sowie der Programmierung auf niederer, maschinennaher Ebene gerecht wird. Letztere ist für Systemteile erforderlich, die direkt mit der Hardware interagieren. Modula-2 entstand aus sorgfältigen Entwurfsüberlegungen und beinhaltet alle Möglichkeiten von Pascal, erweitert um wichtige Konzepte wie Module und Multiprogrammierung. Die Syntax orientiert sich mehr an Modula als an Pascal, was zur Namenswahl führte. Wesentliche Ergänzungen von Modula-2 im Vergleich zu Pascal sind: 1. Das Modulkonzept, das eine Aufspaltung in Definitionsteil und Implementationsteil ermöglicht. 2. Eine systematischere Syntax, die das Erlernen erleichtert, indem jede Struktur, die mit einem Schlüsselwort beginnt, auch mit einem Schlüsselwort endet. 3. Das Konzept des Prozesses als Schlüssel zur Multiprogrammierung. 4. Niedere, maschinennahe Sprachelemente, die es erlauben, die strengen Typenkonsistenzregeln zu umgehen und Daten flexibel abzubilden. 5. Der Prozedurtyp, der eine dynamische Zuweisung von Prozeduren an Variablen ermöglicht. Eine erste Implementierung war 1979 für PDP-11-Rechner verfügbar, und die Sprachdefinition wurde im März 1980 veröffentlicht. Seitdem wird die Sprache täglich an unserem Institut genutzt.
This book emerged from lecture notes of a course taught in the second year to students of Computer Science at the Federal Institute of Tech nology, Zurich. The topic of hardware design plays a relatively minor role in Compu ter Science curricula at many universities. Most courses concentrate on the various aspects of theory, software, and of information sys tems. Students therefore obtain few opportunities to deal with con crete engineering problems and physical devices. We consider this as rather unfortunate, particularly for technical universities. As a result, we observe a growing gap between interest in and understanding of design issues involving not only software but also hardware and inter faces. This is regrettable at a time when new and advanced solutions to many problems are often crucially influenced by recent hardware de velopments, at a time when the engineer needs to be competent in both software and hardware issues in order to fmd an optimally inte grated, competitive solution. It turns out that the hesitation of many students in Computer Science to take an active interest in hardware - his or her daily tool! - does not only stem from a preference of „clean“, abstract concepts with a corre sponding distaste for dealing with concrete components, construction techniques, and the „dirty“ realities inflicted by nature, but also stems from the lack of a bridge between the two realms.
The original description of Pascal by the designer of the language has been up-dated to incorporate the ISO-standard. Revisions to Niklaus Wirth's classic, "Pascal: User Manual and Report" include: Wirth's EBNF syntactical notation - an expanded user manual with improved programming examples - a thorough appendix summarizing changes in the language necessitated by the ISO-standard. What is left unchanged is the rigor and precision that made "PASCAL: User Manual and Report" the definitive reference for nearly a decade.
This is the 4th edition of a successful book which first appeared in 1982. It is an introduction to programming in general as well as a manual for programming with the language Modula-2 in particular. It is oriented primarily towards people who have already acquired some basic knowledge of programming and would like to deepen their understanding in a more structured way. Nevertheless, an introductory chapter is included for the benefit of the beginner, displaying in a concise form some of the fundamental concepts of computers and their programming. The text is therefore also suitable as a self-contained tutorial. The notation used is Modula-2, which lends itself well to a structured approach and leads the student to a working style that has generally become known under the title of structured programming. Modula-2 is a descendant of Pascal, and is particularly suited for programming larger and more complex systems in a structured way. The principal improvement in this 4th edition is a completely new layout. The main changes in the contents are a few minor adaptations in the area of type compatibility. "Programming in Modula-2" by Niklaus Wirth can be considered as the standard reference for Modula-2 programmers.



