Warum versteht mich mein Taschenrechner?

Werbung
Anmerkung des Autor
Diese Präsentation ist mit Powerpoint für
MacOS erstellt. Leider ist sie nicht
vollständig mit Powerpoint für Windows
kompatibel. Das hat zur Folge, dass die
Animationen nicht korrekt abgearbeitet
werden und erscheinende Elemente
zum Teil nicht wieder verschwinden.
Dirk Pape.
Warum versteht mich mein
Taschenrechner?
Von der Formel zum Ergebnis
Dr. Dirk Pape, Institut für Informatik, Freie Universität Berlin
http://www.inf.fu-berlin.de/~pape/
zum 1. Berliner MNU-Kongress, Sept. 2002
Der klassische
Taschenrechner
reagiert auf Tastendrucke
5
5
*
5.0
3
0
30
sin
0.5
=
2.5
Der Computer
interpretiert Formeln
5 * sin(30)
=2.5
speichert Formeln
f(x) = 5 * sin(x)
f(30)
ok.
=2.5
formt Formeln um, etc.
Was bedeutet „interpretieren“?
•
Wörter (Symbole) erkennen
Z.B. Pferd, das oder Satzzeichen
•
Sätze (Syntax) erkennen
Z.B. Das Pferd hält schwarz
•
Bedeutung (Semantik) ermitteln
???
Formeln interpretieren
•
Wörter (Symbole) erkennen
5, *, sin, (, 30, )
•
Sätze (Syntax) erkennen
*
5
sin
30
•
Bedeutung (Semantik) ermitteln
=2.5
Phasen des Interpretierens
Formel in abstrakter Syntax
*
5
Analyse
Formel als Text
5*sin(30)
sin
30
Synthese
Berechne Formel
=2,5
Abstrakte Syntax – Beispiel:
eine Datenstruktur für Formeln
data Formel
= ZAHL Int
| PLUS Formel Formel
| MAL Formel Formel
| SIN Formel
| COS Formel
| VAR String
Formeln rekursiv berechnen
Berechne 1
1.
Berechne 2
1
*
-> 5
2
3
5
2.
sin
Berechne 3
Berechne 4
-> 30
4
Berechne sin (30)
-> 0.5
30
3.
Berechne 5 * 0.5
-> 2.5
Berechnen – Beispiel
berechnen(f) =
case f of
ZAHL n -> n
PLUS f1 f2 -> berechnen(f1) + berechnen(f2)
MAL f1 f2 -> berechnen(f1) * berechnen(f2)
SIN f -> sin (berechnen(f))
COS f -> cos (berechnen(f))
VAR v -> [„auslesen von Variable v“]
Formeln umformen
Forme x * (... + ...) um
1
2 * (4 + 5)
*
-> 2 * 4 + 2 * 5
3
2
+
x
+
5
4
...
...
*
*
2
4
x
...
2
5
x
...
Umformen – Beispiel
umformen(f) =
case f of
ZAHL n -> ZAHL n
PLUS f1 f2 -> PLUS (umformen(f1))
(umformen(f2))
MAL f1 (PLUS f2 f3)
-> PLUS (umformen(MAL f1 f2))
(umformen(MAL f1 f3))
MAL f1 f2 -> MAL (umformen(f1)) (umformen(f2))
SIN f -> SIN (umformen(f))
COS f -> COS (umformen(f))
VAR v -> VAR v
Formeln interpretieren
•
Wörter (Symbole) erkennen
5, *, sin, (, 30, )
•
Sätze (Syntax) erkennen
*
5
sin
30
•
Bedeutung (Semantik) ermitteln
Berechnen =2.5, Umformen, Speichern, ...
Wie versteht mich der Computer?
Zeichen werden zu Wörtern
... --- ...
SO...S?
So...nntag?
So...ndermeldung?
Wörter erkennen
a
start
x
n
s
o
s
pause
SOS
Formelsymbole erkennen
Var „cost“
(
start
+
c
2
o
3
t
s
4
5
(
cos
Tabellengesteuerter Automat
1
(
+
)
c
o
s
*
t
19
13
7
58
2
.
.
.
.
2
3
3
4
5
4
Cos
1
5
Var
1
Informatiker sind
erfindungsreich
Computerprogramme erzeugen die
Tabellen
Computerprogramme erzeugen
Computerprogramme, die Formeln
erkennen
Computerprogramme erzeugen Tabellen
und Computerprogramme aus Formeln
„Scanner“ erkennen Symbole
bs
zf
cos
var
zahl
...
= [a-z]
= [0-9]
= cos
= bs+
= -?zf+
„Scanner“ erkennen Symbole
5*sin(30)
Zahl 5
Mal
Sin
Klammerauf
Zahl 30
Klammerzu
„Scanner“ erkennen Symbole
5*cost*30
Zahl 5
Mal
Var cost
Mal
Zahl 30
„Scanner“ erkennen Symbole
5*sin)30(
Zahl 5
Mal
Sin
Klammerzu
Zahl 30
Klammerauf
Scanner-Generatoren
•
•
•
•
Lex für C, C++, Java, ...
Flex für C, C++, Java, ...
Alex für Haskell
...
Wie versteht mich der Computer?
Wörter werden zu Sätzen
Zahl 5 * Sinus Klammerauf Zahl 30 Klammerzu
*
5
sin
30
Kellerautomat
formel1
+
+
+
formel1
+
(
formel1
+
(
formel1
)
formel1
+
formel2
Eine Grammatik für Formeln
formel : Zahl
| formel Plus formel
| formel Mal formel
| Sinus Klammerauf formel Klammerzu
| Cosinus Klammerauf formel Klammerzu
| Variable
| Klammerauf formel Klammerzu
„Parser“ erkennen Sätze
5, *, Sinus, (, 30, )
*
5
sin
30
Formel 1
*
(
...
Parser-Generatoren
•
•
•
•
Yacc für C, C++, Java, ...
Bison für C, C++, Java, ...
Happy für Haskell
...
Übersetzerbau
Programmiersprachen
•
•
sind Sprachen, mit denen der Computer
programmiert wird (C, Java, Haskell, ...)
haben eine Grammatik
Programme
•
•
•
sind grammatikalisch korrekte Formeln in einer
Programmiersprache
werden mit Hilfe von Scannern und Parsern
analysiert
und in einfache Maschinenbefehle übersetzt
(Synthese)
Algorithmen im Übersetzerbau
Scannen und Parsen
Endlicher Automat
• Endlicher Kellerautomat
• Rekursiver „Ad-hoc-Parser“
Scanner- und Parsergeneratoren
• Anspruchsvolle Algorithmen
•
Synthese
•
Rekursive Funktionen und Prozeduren auf
baumartigen Datenstrukturen
weitere „Highlights“, z. B. „bootstrapping“
Ich wünsche noch viel Spaß
beim MNU-Kongress
Herunterladen