You are on page 1of 25

1. Der Begriff Informatik 2.

Syntax und Semantik von Programmiersprachen

I.2. I.2. Grundlagen Grundlagen von von Programmiersprachen. Programmiersprachen - 1 -

1. Der Begriff Informatik


"Informatik" = Kunstwort aus Information und Mathematik
z Wissenschaft der Informationsverarbeitung mit groer Nhe zur Mathematik

Hauptaufgabe der Informatik


z Entwicklung formaler, maschinell ausfhrbarer Verfahren zur Lsung von Problemen der Informationsverarbeitung

Forderung der Durchfhrbarkeit mittels einer Maschine:


z Informationen mssen als maschinell verarbeitbare Daten dargestellt werden z Lsungsverfahren mssen bis ins Detail formal beschrieben werden.

I.2. Grundlagen von Programmiersprachen - 2 -

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.

I.2. Grundlagen von Programmiersprachen - 4 -

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.

I.2. Grundlagen von Programmiersprachen - 5 -

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

Wie "gut" ist ein Algorithmus?


z Speicherverbrauch, bentigte Zeit (Effizienz) z Aufwandsabschtzungen
I.2. Grundlagen von Programmiersprachen - 6 -

2. Syntax & Semantik von Programmiersprachen


Ein erstes Java-Programm:
public class Rechnung { public static void main (String [] arguments) { int x, y; x = 10; y = 23 * 33 + 3 * 7 * (5 + 6); System.out.print (Das Resultat ist ); System.out.println (x + y); } }

I.2. Grundlagen von Programmiersprachen - 7 -

Programmiersprachen
Die Programmiersprache bildet die Schnittstelle zwischen Mensch und Rechner
Programmiersprache Rechner

Beide haben unterschiedliche Anforderungen


z Mensch Erlernbarkeit Hhere Programmiersprachen Lesbarkeit Ausdrucksstrke z Rechner einfaches bersetzen in Maschinensprache effizienter Code soll generiert werden knnen

Maschinensprachen

I.2. Grundlagen von Programmiersprachen - 8 -

Kenntnis verschiedener Sprachen


Eigene Ideen bei der Software-Entwicklung knnen besser ausgedrckt werden Ntig, um in konkreten Projekten geeignete Sprache auszuwhlen Erleichtert das Erlernen weiterer Programmiersprachen Ntig fr den Entwurf neuer Programmiersprachen
I.2. Grundlagen von Programmiersprachen - 9 -

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

Algol 60 Algol 68 Simula Smalltalk

Lisp

Scheme ML Miranda Eiffel Haskell

Prolog

1990 Ada-95 prozedural Java

objektorientiert

funktional

logisch

I.2. Grundlagen von Programmiersprachen - 11 -

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

I.2. Grundlagen von Programmiersprachen - 12 -

Alphabet, formale Sprache


Alphabet
z nichtleere endliche Menge von Zeichen (Buchstaben, Symbolen)

Wort ber einem Alphabet


z endliche Folge von Buchstaben, die auch leer sein kann ( leere Wort) z A* bezeichnet die Menge aller Wrter ber dem Alphabet A (inkl. dem leeren Wort)

Formale Sprache
z Sei A ein Alphabet. Eine (formale) Sprache (ber A) ist eine beliebige Teilmenge von A*.

Endliche Beschreibungsvorschrift fr unendliche Sprachen


z Grammatik, die Sprache erzeugt, oder Automat, der Sprache erkennt
I.2. Grundlagen von Programmiersprachen - 13 -

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, .. }

I.2. Grundlagen von Programmiersprachen - 14 -

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"

I.2. Grundlagen von Programmiersprachen - 16 -

Grammatik - Definition - 1
Definition:
z Eine Grammatik G ist definiert durch ein Viertupel (N, T, P, S)

N: endliche Menge der Nichtterminalsymbole (Variablen)


z sind Symbole fr syntaktische Abstraktionen z Beispiel: Satz, Subjekt, Prdikat, Objekt, Artikel, Attribut, Substantiv, Adjektiv z kommen nicht in den Wrtern der Sprache vor z werden durch Anwendung der Produktionsregeln solange ersetzt, bis nur noch Terminalsymbole brig sind

T: endl. Menge der Terminalsymbole, disjunkt mit N: N T =


z sind Zeichen des Alphabets, aus denen die Wrter der Sprache bestehen z Beispiel: der, die, das, kleine, bissige, groe, Hund, Katze, jagt
I.2. Grundlagen von Programmiersprachen - 17 -

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

I.2. Grundlagen von Programmiersprachen - 18 -

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

Die von der Grammatik G erzeugte Sprache ist:


z L(G) = { w | w T*, S ... w}
w ist ableitbar aus dem Startsymbol

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

I.2. Grundlagen von Programmiersprachen - 19 -

Kontextfreie Grammatik / Sprache


Produktionsregeln: Ay A N, y V*
d.h.: Links steht genau ein Nichtterminalsymbol

Wichtigste Klasse zur formalen Beschreibung der Syntax von Programmiersprachen.

Es ist mglich, Automaten zu bauen, die Wrter einer kontextfreien Sprache erkennen (Wortproblem) und ihre syntaktische Struktur analysieren (Compilerbau)

Notationen zur Darstellung kontextfreier Grammatiken


z Syntaxdiagramme z Extended Backus-Naur-Form (EBNF)
I.2. Grundlagen von Programmiersprachen - 20 -

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

I.2. Grundlagen von Programmiersprachen - 22 -

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

I.2. Grundlagen von Programmiersprachen - 24 -

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