1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen /...

25
1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten Wörtern/Sätzen fest. Natürliche Sprachen sind in der Regel mehrdeutig: „Öffne die Datei mit dem Editor“ Der Satzteil „mit dem Editor“ kann hier als Attribut des Objekts „Datei“ oder als adverbiale Bestimmung des Verbs „Öffne“ verstanden werden. Formale Sprachen sind dadurch gekennzeichnet, dass Syntax und Semantik eindeutig sind (und damit einer automatische Verarbeitung zugänglich sind). Der Trick dabei ist in der Regel ein geringer Sprachumfang (wenig Syntaxregeln).

Transcript of 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen /...

Page 1: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

1DigInf 05/06

Sprachen und Programmiersprachen

• Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen

• Syntax legt die grammatikalische Korrektheit fest.

• Semantik legt die Bedeutung von syntaktisch korrekten Wörtern/Sätzen fest.

• Natürliche Sprachen sind in der Regel mehrdeutig:• „Öffne die Datei mit dem Editor“

• Der Satzteil „mit dem Editor“ kann hier als Attribut des Objekts „Datei“ oder als adverbiale Bestimmung des Verbs „Öffne“ verstanden werden.

• Formale Sprachen sind dadurch gekennzeichnet, dass Syntax und Semantik eindeutig sind (und damit einer automatische Verarbeitung zugänglich sind). Der Trick dabei ist in der Regel ein geringer Sprachumfang (wenig Syntaxregeln).

Page 2: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

2DigInf 05/06

Übersicht über die Entwicklung von Programmiersprachen

Maschinensprache001001

Assembler Bspe: RS600-Assembler

Konstrukte: MV, ADD, GET)

Imperative / Prozedurale SprachenBspe: Fortran, Cobol, Algol, PL1, Ada, C

Prozeduren, while, case, if

Logische SprachenBsp: Prolog

Konstrukte: Fakten, Regeln

Objektorientierte SprachenBspe: C++, Smalltalk, Eiffel, Java

Funktionale SprachenBspe: LISP, ML, MirandaKonstrukte: Funktionen

Vorgängerbeziehung

Zeit

Page 3: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

3DigInf 05/06

Übersicht über die Entwicklung von Programmiersprachen

Page 4: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

4DigInf 05/06

Programmiersprache

Hinweis: „formal“ meint hier syntaktisch

formal.

Page 5: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

5DigInf 05/06

Operationen auf Wörtern / Verketten

Page 6: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

6DigInf 05/06

Klassen von unendlichen Sprachen

• Die Menge V* aller Wörter über einem Alphabet V ist immer unendlich, sie ist also unabhängig vom zugrundeliegenden Alphabet immer eine unendliche Sprache.

• Wir unterscheiden:• abzählbare Sprachen• überabzählbare Sprachen

Page 7: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

7DigInf 05/06

Abzählbare Sprachen

• Die Abzählbarkeit einer Menge kommt dadurch zum Ausdruck, dass man vom ersten, zweiten, etc. Element sprechen kann.

• Es muss also möglich sein, die natürlichen so auf die Elemente der Menge zu verteilen, dass keines der Elemente ohne Nummer bleibt.

• Definition: (Abzählbarkeit)• Eine Menge M ist abzählbar, falls es eine Funktion

f: Nat M gibt, die surjektiv (d.h. alle Elemente von M kommen als Bildelement vor) oder falls M die leere Menge ist.

Page 8: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

8DigInf 05/06

Abzählbare Sprachen

• Die Menge der rationalen Zahlen ist abzählbar (Beweis mit Cantorschem Diagonalverfahren)

• Beweis in der Vorlesungseinheit 2!

• Die Menge der reellen Zahlen ist nicht abzählbar.

• Beweis in der Vorlesung. Folgende Beweisschritte:• Einschränkung von Nat auf das Intervall [0,1)• Kodierung jeder reellen Zahl r durch eine Abbildung r: Nat\{0}

{0,1, ..., 9}• Annahme einer surjektiven Abbildung von Nat auf [0,1)• Visualisierung durch Tabelle in der allen reellen Zahlen des

Intervalls stehen (angegeben durch ihre Nachkommastellen)• Konstruktion der rellen Zahl diag aus dem Intervall• Nachweis, dass diag nicht in der Tabelle steht

Page 9: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

9DigInf 05/06

Abzählbare Sprachen

Satz: Alle Sprachen über endlichen Alphabeten sind abzählbar.1. Schritt des Beweises: Die Menge V* aller Wörter über einem

Alphabet V ist abzählbar.2. Schritt des Beweises: Jede Teilmenge M´ einer abzählbaren Menge

M ist abzählbar.

1. Beweisschritt:• Sei V={x1, ..., xn}. << sei eine Ordnungsrelation auf V, ohne

Beschränkung der Allgemeinheit nehmen wir an: x1 << ...<< xn.

• Wir ordnen V* gemäß der Länge der Wörter. Wörter gleicher Länge werden lexikographisch geordnet (also „alphabetisch“ sortiert). Damit gibt es eine Reihenfolge aller Wörter. Und damit ist V* abzählbar.

Page 10: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

10DigInf 05/06

Abzählbare Sprachen

2. Beweisschritt: Sei M abzählbar und f: Nat M die nach Definition existierende surjektive Funktion. Wir definieren f´: Nat M´ durch:

f´(n) = f(n), falls f(n) M´ = mit M´ beliebig gewählt, falls f(n) M´

Da f surjektiv ist, kommen alle Elemente von M´ als Bildelemente von f vor. Diese sind aber auch Bildelemente von f´ (Fall f(n) M´). Und damit ist f´ surjektiv. Und damit ist f´ eine Abzählung.

Page 11: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

11DigInf 05/06

Aufzählbare Sprachen

Definition: (Überabzählbarkeit)• Wenn eine Menge M so viele Element hat (so dicht ist), dass sie nicht mehr

durchnummeriert werden kann (also wenn sie nicht abzählbar ist), dann heißt sie überabzählbar.

Definition: (Aufzählbarkeit)• Eine Menge M heißt aufzählbar, falls es eine surjektive Funktion f: Nat M

gibt und einen Algorithmus, der es gestattet, für jedes n Nat den Funktionswert f(n) zu berechnen. Die leere Menge heißt auch aufzählbar.

• Die Menge {f(0), f(1), ..., f(n)} heißt Aufzählung von M.

• Hinweis: Aufzählbarkeit fordert mehr als Abzählbarkeit, denn es muss zusätzlich den Algorithmus geben!

Page 12: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

12DigInf 05/06

Aufzählbare Sprachen

• Satz: Jede endliche Menge ist aufzählbar.

• Beweis:Sei M={m0, ..., mk} eine endliche Menge. Ein Programm zur Aufzählung von M kann nach folgendem Prinzip realisiert werden:

Abhängig vom Eingabeparameter n = 0,1,2, ... wird mithilfe geeigneter Fallunterscheidungen für n<k das Ergebnis f(n)=mn zurückgegeben, für nk wird generell mk als Ergebnis gewählt.

Page 13: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

13DigInf 05/06

Aufzählbare Sprachen

• Satz: Sei V ein Alphabet. Dann ist die Menge V* aller Wörter über V aufzählbar. (Hinweis: V ist nicht notwendigerweise endlich!)

• Beweis:Erzeuge , dann die Wörter der Länge 1, dann die Wörter der Länge 2, und so weiter, bei gleicher Länge in lexikographischer Reihenfolge. Für eine beliebige natürliche Zahl n ergibt sich f(n) aus dem n-ten Schritt dieses Verfahrens.

• Betrachtung: Jede aufzählbare Sprache ist offensichtlich auch abzählbar. Umgekehrt gilt das nicht!

Page 14: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

14DigInf 05/06

Entscheidbarkeit

• Mit einer Aufzählung für eine Sprache kann man für jedes Wort der Sprache nach endlich vielen Schritten nachweisen, dass das Wort zu der Sprache gehört, denn bei der Aufzählung wird es ja nach endlich vielen Schritten erzeugt.

• Hat man aber ein Wort gegeben, das nicht Element der Sprache ist, so kann man dies, falls die Sprache unendlich viele Wörter enthält, mit einer Aufzählung der Sprache nicht nachweisen. Denn dann läuft das Verfahren unendlich lang. Und wir wissen nach endlicher Zeit nicht, ob das Wort vielleicht später doch noch erzeugt wird.

• Beispiel: Compiler soll entscheiden, ob eine Eingabe ein gültiges Programm ist. Dieses Problem lässt sich durch Aufzählung aller gültigen Programme nicht sinnvoll lösen!

• Da uns solche Probleme in der Informatik öfter begegnen, sind die entscheidbaren Sprachen besonders interessant!

Page 15: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

15DigInf 05/06

Entscheidbarkeit

Definition: (Entscheidbarkeit)• Gegeben sei ein Alphabet V. Eine Sprache L V heißt

entscheidbar, falls es einen abbrechenden Algorithmus, Entscheidungsverfahren genannt, gibt, der für jedes w V feststellt, ob w L oder w L.

Page 16: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

16DigInf 05/06

Beispiel zur Entscheidbarkeit

Alphabet: V = {a}

Sprache:LV* mit L = {a2n | n Nat}

Entscheidungsverfahren:Sei w V* beliebig gegeben. Streiche nach und nach immer wieder aa aus Wort w raus. Bleibt kein a übrig, gilt w L, sonst nicht.

Bemerkungen: Offensichtlich ist jede endliche Sprache entscheidbar. Denn jedes zu prüfende Wort lässt sich mit allen Wörtern der Sprache vergleichen.

Page 17: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

17DigInf 05/06

Entscheidbarkeit

Satz: Jede entscheidbare Sprache ist aufzählbar.

Beweis:Sei V ein Alphabet und L V* entscheidbar. Zähle V* auf und entscheide mit dem Entscheidungsverfahren für jedes bei der Aufzählung erzeugte w V*, ob w L oder w L. Übergeht man alle w L, so erhält man eine Aufzählung für L.

Hinweis: Aus der Aufzählbarkeit einer Sprache folgt nicht die Entscheidbarkeit. Die Schwierigkeit liegt darin, für diejenigen Wörter eine Entscheidung zu treffen, die nicht in der Sprache enthalten sind. Man kann sich durch eine Aufzählung so viele Wörter anschauen wie man möchte, sie werden nicht dabei sein. Sie könnten aber prinzipiell ja später noch auftauchen.

Page 18: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

18DigInf 05/06

Entscheidbarkeit

Eine aufzählbare, aber nicht entscheidbare Sprache:

Wenn man Computerprogramme und Eingaben für Computerprogramme als Wörter über einem Alphabet wie ASCII auffasst, so ist die Sprache L ASCII*, mit

L = {xy | x ist ein Programm, y ist eine Eingabe, und x stoppt bei der Eingabe y nach endlich vielen Schritten}

zwar aufzählbar, aber nicht entscheidbar. Dies folgt unmittelbar aus dem schon diskutierten Halteproblem.

Page 19: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

19DigInf 05/06

Zusammenfassendes Mengendiagramm

Page 20: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

20DigInf 05/06

Wieviele Probleme kann der Computer lösen?

• ASCII ist ein endliches Alphabet. Also, lassen sich nur abzählbar viele Programme formulieren.

• Eine einfache überabzählbare Menge von Problemen besteht darin, für jede reelle Zahl r die folgende Funktion fr: reelle Zahlen -> {0,1} zu berechnen:

fr(x) = 1, falls x=rfr(x) = 0, sonst

• Folglich ist nur eine verschwindend geringe Zahl von Funktionen berechenbar (ungefähr so wenige wie rationale Zahlen im Verhältnis zu reellen Zahlen existieren).

Page 21: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

21DigInf 05/06

Grammatiken

Definition: (Grammatik)Eine Grammatik ist ein Quadrupel G = (VN, VT, P,S) mit

VN, VT sind endliche, nichtleere Mengen mit VN VT =.

VN ist die Menge der nichtterminalen Symbole.

VT ist die Menge der terminalen Symbole

P ist eine endliche Menge von Regeln der Form mit (VN VT)+, (VN VT).

Die Elemente von P werden Produktionen, Produktuionsregeln oder Grammatikregeln genannt.

S VN ist das Startsymbol.

Page 22: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

22DigInf 05/06

Grammatiken

• Terminalsymbole beschreiben Symbole, die in den Sätzen der Sprache vorkommen.

• Nicht-Terminalsymbole kommen nicht in den Sätzen der Sprache vor. Sie werden gebraucht, um die Anwendung der Ableitungsregeln zu koordinieren.

• Das Startsymbol ist ein ausgezeichnete Nicht-Terminalsymbol. Es legt fest, mit welcher Ableitungsregel begonnen wird, um zu einem syntaktisch korrekten Satz der Sprache zu kommen.

• Die Ableitungsregeln legen fest, wie eine Sequenz von Nicht-Terminal- und Terminalsymbolen durch eine Folge anderer Terminalsymbole und Nicht-Terminalsymbole ersetzt werden kann.

Page 23: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

23DigInf 05/06

Produktionen

Beispiel einer Produktion:• einfacher-deutscher-Satz = Subjekt Prädikat Objekt

[adverbiale-Bestimmung]• Subjekt = Nomen | Personalpronomen• Personalpronomen = Ich | Du | ...

• {} steht für 0 bis n-fache Wiederholung • [] steht für Optionalität (0 oder einfaches Vorkommen)• | trennt Varianten voneinander• fett: Terminalsymbole, • kursiv: Nicht-Terminalsymbole

Page 24: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

24DigInf 05/06

Ableitungen

Definition: (Ableitung)•

Page 25: 1 DigInf 05/06 Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische.

25DigInf 05/06

Erzeugte Sprache

Definition: (Erzeugte Sprache)Die von der Grammatik G = (VN, VT, P,S) erzeugte Sprache

L(G) = {x VT* | S x}

Die Wörter der von der Grammatik erzeugten Sprache werden auch als die grammatikalisch korrekten Wörter bezeichnet.

Definition: (Äquivalenz von Grammatiken)Zwei Grammatiken G1 und G2 heißen äquivalent, falls gilt:

L(G1) = L(G2)

*