Algorithmus
Ein Algorithmus ist ein Verfahren, welches
z in einem endlichen Text niedergelegt werden muss z effektiv (durch eine Maschine ) ausgefhrt werden kann z aus (direkt maschinell ausfhrbaren) Elementaroperationen besteht und eindeutig festlegt, welche Elementaroperation als nchstes auszufhren ist (Determinismus) z Ein- und Ausgabe ermglicht, wobei jeder Eingabe genau eine Ausgabe zugeordnet wird (Determiniertheit)
Anzahl und Ausfhrungszeit der Elementaroperationen sind beschrnkt. Ein Algorithmus (Programm) wird durch eine Maschine schrittweise ausgefhrt
z Die ausfhrende Instanz muss die Vorschrift interpretieren und korrekt ausfhren. z Ein Algorithmus terminiert, wenn er nach endlich vielen Schritten abbricht.
I.2. Grundlagen von Programmiersprachen - 3 -
Deterministischer Algorithmus
Berechnung von |x-y|
1. 2. 3. 4. 5. Lies Eingaben x und y. Falls x y: Weiter mit Schritt 3. Falls x > y: Weiter mit Schritt 4. Berechne a = y - x. Weiter mit Schritt 5. Berechne a = x - y. Gib a aus.
Indeterministischer Algorithmus
Berechnung von |x-y|
1. 2. 3. 4. Lies Eingaben x und y. Weiter mit Schritt 2 oder Schritt 3. Berechne a = x - y. Weiter mit Schritt 4. Berechne a = y - x. Falls a 0: Gib a aus. Falls a < 0: Gib -a aus.
Fragen
Wie kann man aus einer Lsungsidee einen Algorithmus konstruieren?
z "schrittweise Programmentwicklung"
Wie beweist man, dass ein Algorithmus tatschlich das tut, was er tun soll?
z Verifikation: partielle Korrektheit z Terminierung
Programmiersprachen
Die Programmiersprache bildet die Schnittstelle zwischen Mensch und Rechner
Programmiersprache Rechner
Maschinensprachen
bersicht
Imperative Sprachen
z Folge von nacheinander ausgefhrten Anweisungen
Deklarative Sprachen
z Spezifikation dessen, was berechnet werden soll z Festlegung, wie Berechnung verluft durch Compiler
Prozedurale Sprachen
z Variablen, Zuweisungen, Kontrollstrukturen
Funktionale Sprachen
z keine Seiteneffekte z Rekursion
Objektorientierte Sprachen
z Objekte und Klassen z ADT und Vererbung
Logische Sprachen
z Regeln zur Definition von Relationen
I.2. Grundlagen von Programmiersprachen - 10 -
Wichtige Programmiersprachen
1950 Fortran 1960 Cobol PL/1 1970 Pascal C 1980 Ada C++
Modula-3
Lisp
Prolog
objektorientiert
funktional
logisch
Programmiersprachen - Definition
Programmiersprachen sind Sprachen, deren Syntax und Semantik genau festgelegt ist.
Syntax:
z Definition aller zulssigen Wrter / Programme, die in einer Sprache formuliert werden knnen
Semantik:
z Bedeutung der zulssigen Wrter / Programme z Syntaktische falsche Wrter / Programme haben keine Semantik
Formale Sprache
z Sei A ein Alphabet. Eine (formale) Sprache (ber A) ist eine beliebige Teilmenge von A*.
Beispiele
Beispiel 1
z A1 = { 0,1}, A1* = { , 0, 1, 01, 10, 11, 000, 100 , } z L = {0, 1, 10, 11, 100, 101, .. } A1*, die Menge der Binrdarstellungen natrlicher Zahlen (mit Null, ohne fhrende Nullen)
Beispiel 2
z A2 = {(, ), +, -, *, /, a}, A2* = {, (), (+-a), (a*a), } z die Sprache der korrekt geklammerten Ausdrcke EXPR A2* : EXPR = { (((a))), (a + a), (a - a)*a + a /(a + a) -a, .. }
Grammatik - informell
Definiert Regeln, die festlegen, welche Wrter ber einem Alphabet zur Sprache gehren und welche nicht. Beispiel: Grammatik fr "Hund-Katze-Stze"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Satz Subjekt Artikel Artikel Artikel Artikel Attribut Attribut Attribut Adjektiv Adjektiv Adjektiv Substantiv Substantiv Prdikat Objekt Subjekt Prdikat Objekt Artikel Attribut Substantiv der die das Adjektiv Adjektiv Attribut kleine bissige groe Hund Katze jagt Artikel Attribut Substantiv
I.2. Grundlagen von Programmiersprachen - 15 -
Grammatik - informell
Grammatik fr "Hund-Katze-Stze"
z durch diese Grammatik knnen z.B. die folgenden Stze gebildet (abgeleitet) werden "der kleine bissige Hund jagt die groe Katze" "die kleine Katze jagt der bissige Hund" "das groe Katze jagt der kleine groe bissige kleine . Katze" z folgende "Stze" werden nicht durch diese Grammatik gebildet "die Katze der Hund" "Katze und Hund" "der Hund jagt die Katze die jagt Hund"
Grammatik - Definition - 1
Definition:
z Eine Grammatik G ist definiert durch ein Viertupel (N, T, P, S)
Grammatik - Definition - 2
P: endliche Menge von Produktionsregeln x y
z Regel x y bedeutet, dass das Teilwort x durch das Teilwort y ersetzt werden kann z x V* N V*, y V*, wobei V = N T (Vokabular). D.h.: sowohl x als auch y knnen beliebige Nichtterminal- und Terminalsymbole enthalten, x enthlt mindestens ein Nichtterminal. z Beispiel: Prdikat jagt der kleine bissige Hund Prdikat Objekt der kleine bissige Hund jagt Objekt
S: das Startsymbol
z ist ein spezielles Nichtterminalsymbol aus N, aus dem alle Wrter der Sprache mit Hilfe der Grammatik erzeugt werden z Beispiel: Satz
Grammatik - Definition - 3
Ableitung
z Ableitungsprozess ist eine Relation "" auf V* z Fr u, v, y V * und x V *NV* gilt uxv uyv genau dann, wenn (x y) P
z D.h.: Jedes durch Anwendung der Regeln aus S erzeugbare Wort, das nur aus Terminalsymbolen besteht, gehrt zu der Sprache L(G) z zwei Grammatiken heien quivalent, wenn sie dieselbe Sprache erzeugen
Es ist mglich, Automaten zu bauen, die Wrter einer kontextfreien Sprache erkennen (Wortproblem) und ihre syntaktische Struktur analysieren (Compilerbau)
Grammatik - Beispiel
Sei G = (N, T, P, S) mit
z N = {A, B} z T= z P= z S= {a, b, c, d} { A aBbc, B aBb, aBb d } A L(G) = { a d b c | n 0}
n n
z G ist keine kontextfreie Grammatik, da die dritte Produktionsregel auf der linken Seite mehr als nur das Nichtterminalsymbol B enthlt.
Ersetzt man in G die Produktionen P durch P', dann ist G' kontextfrei. Es gilt L(G) = L(G')
z P' = { A Bc, B aBb, Bd }
I.2. Grundlagen von Programmiersprachen - 21 -
EBNF
EBNF (Extended Backus-Naur-Form)
z kompaktere Reprsentation kontextfreier Grammatiken z BNF erstmals benutzt zur Definition der Sprache Algol-60 z EBNF-Notation = definiert als (...|...) genau eine Alternative aus der Klammer muss kommen [ ... ] Inhalt der Klammer kann kommen oder nicht { ... } Inhalt der Klammer kann n-fach kommen, n 0 Terminalsymbole werden in " " eingeschlossen
Beispiel - Grammatik
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Satz Subjekt Artikel Artikel Artikel Artikel Attribut Attribut Attribut Adjektiv Adjektiv Adjektiv Substantiv Substantiv Prdikat Objekt
Subjekt Prdikat Objekt Artikel Attribut Substantiv der die das Adjektiv Adjektiv Attribut kleine bissige groe Hund Katze jagt Artikel Attribut Substantiv
I.2. Grundlagen von Programmiersprachen - 23 -
Beispiel in EBNF
Unsere einfache Grammatik fr "Hund-Katze-Stze" sieht in EBNF folgendermaen aus: Satz Subjekt Artikel Attribut Adjektiv Substantiv Prdikat Objekt = = = = = = = = Subjekt Prdikat Objekt Artikel Attribut Substantiv [ ("der" | "die" | "das") ] { Adjektiv } ("kleine" | "bissige" | "groe") ("Hund" | "Katze") "jagt" Artikel Attribut Substantiv
Syntaxdiagramme
Syntaxdiagramme (beschreiben Produktionen grafisch)
z Nichtterminalsymbole sind Rechtecke z Terminalsymbole sind rund / oval
Subjekt Artikel Artikel der die das Attribut Adjektiv
I.2. Grundlagen von Programmiersprachen - 25 -
Attribut
Substantiv