Claus Schönleber

Hitchhacker´s Guide To PASCAL  [Vol. 1]

 [ weiter ]
   [ Start | Beispielprogramme Download | Home

Inhalt

Compiler
Programmieren
Datentypen,
Variablen,
Standardfunktionen
Logik
Verzweigung,
Strukturierung
Schleifen
Felder (Arrays)
Verteiler: CASE
Zeichenketten
(Strings)
Textdateien
Module
(Prozeduren,
Funktionen)
Anhang
(Operatoren,
abgeleitete
Funktionen)

weiter zu Teil 2...

  Dieser Text entstand aus Skripten (und später Büchern), die im Unterricht an den Volkshochschulen im BOW-Verbund eingesetzt wurden. Als Programmierumgebung dient(e) Borlands TurboPASCAL 5.x für MS-DOS. Wo möglich, wurde auch in diesem Text versucht, sich an die ISO-Definition zu halten. Die Praxis zeigt jedoch, daß das nicht immer geht. Vor allem zur Bildschirmansteuerung werden Turbo-spezifische Funktionen eingesetzt.

Dieser Kurs ist gleichzeitig eine Einführung in das Programmieren. Viele Aussagen und Verfahren gelten auch für andere Programmiersprachen, sie werden dort nur syntaktisch anders dargestellt.

Compiler

Wo findet man PASCAL Compiler?

Wenn Sie eine Linux-Distribution (z.B. Suse, Red Hat, etc.) besitzen, haben Sie bereits einen freien PASCAL-Compiler. Schauen Sie einfach unter den Programmpaketen nach. Andernfalls schauen Sie unter einem der folgenden Verweise [Links korrigiert; 20090111]: Weitere freie PASCAL-Compiler...

Was ist ein Compiler?

Bei der Programmierung von Computern hat man die Wahl zwischen zwei verschiedenen Methoden: 

1. Maschinensprache/ASSEMBLER

Man schreibt das Programm in der Sprache, die der Prozessor "versteht". Das ist die vom Prozessortyp abhängige Maschinensprache. Sie besteht einfach aus einer Folge von Binärmustern. Man kann sich das als eine scheinbar wirre Folge von zwei Zeichen, beispielsweise '0' und 'I', vorstellen. Eine Folge von 8 oder mehr solcher Zeichen kann dabei einen Befehl oder ein Datum für einen Befehl darstellen. Eine Erleichterung dieser Art der Programmierung stellt dabei die ASSEMBLER-Programmierung dar. Hier bekommen die Binärmuster, die einen Befehl darstellen, ein Kürzel (Mnenomic) zugewiesen, Daten werden in Form von Zahlen oder Zeichenfolgen aus Zeichen des Alphabets dargestellt. Die Programmierung mit dieser Methode hat den Vorteil, daß man sehr "nahe an der Maschine" programmieren kann und die Programme optimal schnell werden. Der Nachteil ist die Tatsache, daß nur elementare Operationen möglich sind (Addition, Vergleiche, Sprünge,..). Alles, was komplizierter ist, muß selbst dazugebaut werden (Makros).

ASSEMBLER-Programme, und noch mehr Maschinenprogramme, sind nur schwer zu überblicken, und es gehört schon sehr viel Erfahrung in der Architektur des Prozessors und der Hardware dazu, größere Programme in halbwegs sinnvoller Zeit fehlerfrei fertig zu stellen. 
 

START    STM   R14,R12,12(R13)
         DROP  R15
         LR    R12,R15
         .....
[Fragment eines ASSEMBLER Programms]

2. Programmiersprache

Man schreibt das Programm in einer der Umgangssprache ähnlichen Sprache, in einer Programmiersprache. Solche Sprachen stellen mehr oder weniger komplexe Funktionen zur Verfügung, so daß der Programmierer sich auf die Lösung seines Problems konzentrieren kann. Ein Programm, das in einer solchen Sprache geschrieben worden ist, kann der Prozessor nicht "verstehen". Es muß vor der Ausführung in Maschinensprache übersetzt werden. Dies besorgen Compiler und Interpreter. Der Unterschied zwischen der Umgangssprache und einer Programmiersprache ist die Eindeutigkeit des Regelwerkes, mit dem solch eine primitive Sprache, eine Programmiersprache, definiert ist. 

Programmiersprache
Eine Programmiersprache ist eine Vorschrift über die Art und Weise, wie und mit welchen Mitteln (Zeichen,
Wörtern) eine Problemlösung formuliert werden darf. Dabei muß Eindeutigkeit gewährleistet sein. 
Beispiele
FORTRAN, BASIC, PASCAL, C, LISP, PROLOG, SMALLTALK, SIMULA, MUMPS, FORTH, APL 
Weitere Beispiele findet man unter http://www.codesyntax.com/zOpenDirectory/Top/Computers/Programming/Languages/

Programmiersprachen sind nicht nur zur Formulierung von Programmen für Computer im Sinne dieses Buches geeignet. Als "Urvater" aller modernen Programmiersprachen kann ALGOL gelten. ALGOL (ALGOrithmic Language) wurde Ende der 50er Jahre von einer Gruppe von Experten entwickelt, um einem Zustand abzuhelfen, der diesen Experten lange schon ein Dorn im Auge war. Zwar hatte man in der mathematischen Formelsprache ein Werkzeug gefunden, das eindeutig genug mathematische und formal logische Zusammenhänge zu formulieren erlaubte. Schwierigkeiten hatte man jedoch bei der Formulierung von Rechenverfahren, die in der Praxis benötigt werden, gerade in der aufkommenden Welt der Computer. So entwickelte man eine Formelsprache zur schriftlichen Fixierung von praktischen Rechenverfahren, um auch diese eindeutig und präzise formulieren zu können. Die neuen Eigenschaften dieser Formelsprache erwiesen sich außerdem als höchst geeignet für die neuen Rechenmaschinen, die Computer; wenigstens in der Theorie. Auch Programme, die ja nichts weiter als Verfahrensvorschriften für diese Maschinen sind, konnten mit Hilfe solcher neuen Formelsprachen formuliert werden. ALGOL hat sich jedoch nie durchgesetzt, da man zur Zeit der Entwicklung noch nicht in der Lage war, Compiler für derartig komplexe Sprachen zu bauen. Moderne Sprachen wie PASCAL, C, C++, JAVA u.s.w. haben jedoch das erfolgreiche Konzept von ALGOL übernommen und sind heute tagtäglich im Einsatz. 
 

a)
PROGRAM hubbel; 
  VAR x,y : integer; 
BEGIN 
  writeln (x); 
END. 
b)
#include <iostream>
using namespace std;

int main ()
{
 int a,b;
 cout << a << b << endl;
 return 0;
}
c)
(defun* foo (a &optional b &key c d (e 17)))
[Beispiele für Programme: a) PASCAL b) C++ c) LISP]

Compiler und Interpreter sind, grob gesagt, Übersetzungsprogramme, die nach verschiedenen Methoden vorgehen. Compiler bearbeiten den Quelltext (Das ist der in einer Programmiersprache geschriebene Programmtext) und übersetzen ihn in die Maschinensprache. Das entstandene Gebilde erst ist dann das ausführbare Programm, der Quelltext nur noch für Änderungen oder zur Dokumentation wichtig. Interpreter übersetzen erst nach der Aufforderung, das Programm zu starten. Dabei wird der Quelltext bei jedem Ablauf des Programms wieder übersetzt, was die Ausführungsdauer stark heraufsetzt. Es ist ungefähr der gleiche Unterschied wie zwischen einem Simultandolmetscher und einem Übersetzer: der Dolmetscher übersetzt im Augenblick der Anforderung, der Übersetzer bekommt einen vollständigen Text, hat zum Übersetzen genügend Zeit und legt einen komplett übersetzten Text vor. Hier interessieren uns jedoch nur Compiler, da speziell im Falle von PASCAL nur sehr selten (meist nur für Lehrzwecke) Interpreter zu finden sind. 

Compiler
Ein Compiler ist ein speziell für einen bestimmten Hardwaretyp geschriebenes Programm, das ein nach einem
bestimmten Regelwerk geschriebenen Text in ein entsprechendes ausführbares Maschinenprogramm übersetzt. 
Beispiele
(Siehe oben "Wo findet man Compiler?")
An dieser Stelle ist ein wichtiger Hinweis angebracht: Der Unterschied zwischen der Programmiersprache (Definition) und ihrer Implementation. Die Sprache ist ein abstraktes Regelwerk, die Implementation (Compiler, Interpreter) ist ein nach diesen Regeln gebautes Maschinenprogramm und damit selbst eine "Maschine" in der Maschine Computer. 

Zusätzlich zum Compiler benötigt man ein weiteres Programm, das die Erstellung und Korrektur eines Quelltextes erlaubt. Solche Programme heißen Programmeditoren. Sie unterscheiden sich von Textverarbeitungsprogrammen, die auch Texteditoren heißen, in der Art der Editorfunktionen, da beim Erstellen eines Programmquelltextes andere Voraussetzungen gelten als beim Schreiben eines normalen Textes in Umgangssprache. Oftmals sind solche Programmeditoren syntaxsensitiv, das bedeutet, daß sie Syntaxfehler während des Schreibens erkennen und darstellen können (zum Beispiel durch Farbcodierung).

Kauft man heute einen "Compiler", so bekommt man nicht nur den eigentlichen Compiler, sondern ein ganzes Entwicklungssystem. Dazu gehören im allgemeinen: 

  • der Compiler 
  • ein (syntaxsensitiver) Texteditor 
  • ein Debugger
Es bleibt noch die Erklärung des Begriffs Debugger. Das Wort leitet sich wohl von der englischen Gewohnheit ab, Fehler als "bugs" (der deutsche Sprachgebrauch hat daraus "Wanzen" gemacht) zu bezeichnen. Demgemäß heißt die Fehlersuche und -beseitigung "debug", was mit "entwanzen" wohl zutreffend übersetzt werden kann. Ein Programm, das bei der Fehlerdiagnose hilft, heißt Debugger
 
 [ weiter ]
   (c) 2001 Schoenleber.com