formale sprachen teil 3 klaus becker 2006. 2 syntax und semantik

52
Formale Sprachen Teil 3 Klaus Becker 2006

Upload: odila-rathgeb

Post on 06-Apr-2015

112 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

Formale SprachenTeil 3

Klaus Becker

2006

Page 2: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

2 Syntax und Semantik

Page 3: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

3 Teil 1

Mini-Programmiersprache

Page 4: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

4 Zielsetzung

Ziel ist es, für eine einfache Programmiersprache einen Interpreter und einen Compiler zu entwickeln. Die hier betrachtete Programmiersprache orientiert sich an der Sprache zur Steuerung des Roboters Karol.

hinlegenschrittwiederhole solange NichtIstZiegel wiederhole solange NichtIstWand schritt *wiederhole linksDrehen*wiederhole

1

Page 5: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

5 Die Programmiersprache

Zur Vereinfachung der Darstellung verwenden wir abkürzende Bezeichner für die Anweisungen der Programmiersprache.

hinlegenschrittwiederhole solange NichtIstZiegel wiederhole solange NichtIstWand schritt *wiederhole linksDrehen*wiederhole

hswh nz wh nw s *wh l*wh

Page 6: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

6 Die Programmiersprache MyKa

Elementare Anweisungen:h „Ziegel hinlegen“a „Ziegel aufheben“s „Schritt vorwärts“l „links drehen“r „rechts drehen“

hswh nz wh nw s *wh l*whElementare Bedingungen:

nz „nicht auf Ziegel“nw „nicht vor Wand“

Kontrollanweisung:wh ... ... „wiederhole solange ...“ *wh

Ein MyKa-Programm setzt sich – wie im Beispiel gezeigt – aus elementaren und Kontrollanweisungen zusammen. Bei der Darstellung von MyKa-Programmen dürfen mehrere Anweisungen in eine Zeile geschrieben werden, ...

Page 7: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

7 Zweistufige Sprachbeschreibung

Zeichen:Zeichen:

{h, a, s, l, r, nz, nw, wh, *wh}

{h s wh nz wh nw s *wh l *wh , ...}

Sätze / Tokenfolgen:Sätze / Tokenfolgen:

Wörter / Token:Wörter / Token:

{ASCII: a, b, c, ..., ´*´, ´ ´, chr(13), chr(10), ...}

Festlegung der korrekten Token (Wörter)

Festlegung der korrekten Tokenfolgen (Sätze)

Oft ist es sinnvoll, eine formale Sprache zweistufig festzulegen:

Zeilenumbruch

Zeilenumbruch

Alphabet für Token

Alphabet für Programme

Sprache der Token

Sprache der Programme

Page 8: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

8 Eine Grammatik für MyKa

! Terminalsymbole

S = sL = lR = rH = hA = aNW = n wNZ = n zWHA = w hWHE = '*' w h

...

...

"Start Symbol" = <Programm>

! Produktionen <Programm> ::= <Anweisungsfolge><Anweisungsfolge> ::= <Anweisung> <Anweisungsfolge> ::= <Anweisung> <Anweisungsfolge><Bedingung> ::= NW<Bedingung> ::= NZ<Anweisung> ::= S<Anweisung> ::= L<Anweisung> ::= R<Anweisung> ::= H<Anweisung> ::= A<Anweisung> ::= WHA <Bedingung> <Anweisungsfolge> WHE

MyKa1.grm

Page 9: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

9 Aufgabe

Starten Sie das Werkzeug „GOLD Parser Builder“ und laden Sie die Datei „MyKa1.grm“. Testen Sie die hier vorgegebene Grammatik zur präzisen Festlegung der Programmiersprache MyKa.

Page 10: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

10 Es fehlt die Semantik

Bisher wurde nur die Syntax der Sprache MyKa festgelegt. Die Bedeutung der einzelnen Sprachelemente scheint klar zu sein. Aber ist das wirklich so? Bereits bei der elementaren Anweisung „h“ ist nicht klar, wie viele Ziegel hingelegt werde, ob der / die Ziegel in die Zelle, in der sich der Roboter befindet, gelegt werden, oder in die vor dem Roboter usw. .

Ziel ist es im Folgenden, auch die Semantik der Programmiersprache exakt zu beschreiben. Zwei Ansätze sollen hierzu vorgestellt werden: Zum einen soll die Bedeutung der Konstrukte der Sprache MyKa durch das Verhalten eines Interpreters festgelegt werden (Interpreteransatz). Zum anderen soll die Bedeutung von Konstrukten der Sprache MyKa auf die Bedeutung der Konstrukte einer anderen (bereits bekannten) Sprache zurückgeführt werden (Übersetzeransatz).

Letztlich werden hier somit ein Interpreter und ein Übersetzer (Compiler) für die Programmiersprache MyKa entwickelt. Zur syntaktischen Vorbereitung werden zudem ein Scanner und ein Parser für diese Sprache benutzt.

Page 11: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

11 Teil 2

Scanner und Parser

Page 12: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

12 Syntaxanalyse

Zur Analyse der Syntax der Sprache MyKa sollen im Folgenden ein Scanner und ein Parser entwickelt werden. Nach der Syntaxanalyse soll feststehen, ob eine vorgegebene Zeichenfolge ein syntaktisch korrektes MyKa-Programm darstellt.

hswh nz wh nw s *wh l*wh

Page 13: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

13 Scanner

Aufgabe eines Scanners ist es, aus einer Zeichenfolge lexikalische Einheiten zu bilden und diese als Tokenfolge aufzubereiten.

hswh nz wh nw s *wh l*wh

Scanner

h s wh nz wh nw s *wh l *wh

Scanner-Automat

Page 14: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

14 Scanner-Automat

n

q0

q1

q20

q3

q30

´ ´; chr(13)

q2

q10

´ ´; chr(13); chr(10)

w

*

zw

h

s; l; r; h; a

Fehlerzustand

Der Scanner benutzt einen endlichen Automaten zur Erkennung der lexikalischen Einheiten.

Immer dann, wenn der Endzustand erreicht wird, ist ein Token erkannt. Danach beginnt der Scanner seine Arbeit wieder im Anfangszustand.

w

Page 15: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

15 Parser

Aufgabe eines Parsers ist es, eine Tokenfolge auf syntaktische Korrektheit zu analysieren (und evtl. die Tokenfolge geeignet aufzubereiten).

Parser

Ok!

Parser-Automat

h s wh nz wh nw s *wh l *wh

Page 16: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

16 Parser-Automat

q0

q1

q2

any / s : any / l :any / r : any / h :any / a :

wh / *wh : pop

any / wh : push wh

Der Parser benutzt einen Kellerautomaten zur syntaktischen Analyse der Tokenfolge.

any / nz : any / nw :

else / *wh : any / nz :any / nw :

any / s : any / l :any / r : any / h :any / a :

any / wh :any / *wh :

Fehlerzustand

Oberstes Kellerzeichen /

Eingabezeichen: Kelleroperation

Der Kellerautomaten akzeptiert eine Zeichenfolge, wenn der Automat nach Abarbeitung der Zeichenfolge im Enzustand ist und wenn zudem der Keller leer ist.

Page 17: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

17 Aufgabe

Testen Sie den implementierten Scanner.

Schauen Sie sich die Implementierung an.

Berücksichtigen Sie beim Scanner-Automaten zusätzlich folgende Kontrollanweisung:

if <Bed.> th <Anw.> el <Anw.> *if

Ergänzen Sie die Implementierung des Scanner-Automaten entsprechend und testen Sie den erweiterten Scanner.

Page 18: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

18 Aufgabe

Testen Sie den implementierten Parser.

Schauen Sie sich die Implementierung an.

Berücksichtigen Sie beim Parser-Automaten zusätzlich folgende Kontrollanweisung:

if <Bed.> th <Anw.> el <Anw.> *if

Ergänzen Sie die Implementierung des Parser-Automaten entsprechend und testen Sie den erweiterten Parser.

Page 19: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

19 Teil 3

Ein Programm-Interpreter

Page 20: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

20 Interpreter

Ein Interpreter führt die Anweisungen Schritt für Schritt aus. Er beschreibt damit das Verhalten der jeweiligen Anweisungen.

Eine präzise Interpreter-beschreibung kann somit zur Festlegung der Semantik der Elemente der Programmier-sprache benutzt werden (Interpreter-Semantik).

Zustand vorher: abzuarbeitendes Programm;

Roboterwelt

h s wh nz wh nw s *wh l *wh

Zustand nachher: abzuarbeitendes Programm;

Roboterwelt

Page 21: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

21 Ausführungstransformationen

h s wh nz wh nw s *wh l *wh

s wh nz wh nw s *wh l *wh

wh nz wh nw s *wh l *wh

1

wahr

wh nw s *wh l wh nz wh nw s ...

1

...

Page 22: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

22 Ausführungstransformationen

s wh nw s *wh l wh nz wh nw s ...

wh nw s *wh l wh nz wh nw s ...

1

wahr

s wh nw s *wh l wh nz wh nw s ...

1

wh nw s *wh l wh nz wh nw s ...

1

1

...

wahr

Page 23: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

23 Ausführungstransformationen

l wh nz wh nw s *wh l *wh

wh nz wh nw s *wh l *wh

1

falsch

wh nw s *wh l wh nz wh nw s ...

1

wh nw s *wh l wh nz wh nw s ...

1

1

...

wahr

Page 24: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

24 Transformationsregeln

...

s ...

...

s ...

Vor der Wand

Page 25: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

25 Transformationsregeln

...

h ...

...

h ...

Anzahl: n

Anzahl: n+1

Page 26: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

26 Transformationsregeln

<K> wh <B> <K> *wh ...

wahr

wh <B> <K> *wh ...

...

falsch

wh <B> <K> *wh ...

Page 27: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

27 Semantikfestlegung mit Regeln

Solange d. Restprogramm-Stapel nicht leer ist

wende die zum obersten Stapelelement passende Transformationsregel an

...

s ...

Das Verhalten des Interpreters wird hier präzise mit Hilfe von Transformationsregeln festgelegt. Diese bilden somit die Grundlage für eine Implementierung des Interpreters.

Page 28: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

28 Aufgabe

Testen Sie den implementierten Interpreter.

Schauen Sie sich die Implementierung an.

Entwerfen Sie Transformationsregeln, die die Ausführung der folgenden Kontrollanweisung beschreiben:

if <Bed.> th <Anw.> el <Anw.> *if

Ergänzen Sie die Implementierung des Interpreters entsprechend der Transformationsregeln.

Page 29: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

29 Teil 4

Ein Programm-Übersetzer

Page 30: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

30 Übersetzer

Ein Übersetzer transformiert Programme der Ausgangs-Programmiersprache (Quellsprache) in eine andere Sprache (Zielsprache).

Eine präzise Übersetzer-beschreibung kann zur Festlegung der Semantik der Elemente der Ausgangs-Programmiersprache benutzt werden, sofern die Semantik der Zielsprache klar ist (Übersetzer-Semantik).

Zustand vorher: abzuarbeitendes Programm;

Roboterwelt

Zustand nachher: abzuarbeitendes Programm;

Roboterwelt

h s wh nz wh nw s *wh l *wh

h s nz 10 nw 8 s 4 l 2

Page 31: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

31 Von der Quell- zur Zielsprache

falsch

h

s

nz?wahr

falschnw?

wahr

s

l

0

1

2

4

10

8

6

9

4

3

5

h s nz 10 nw 8 s 4 l 2h s wh nz wh nw s *wh l *wh

h s wh nz wh nw

s *wh l *wh

Die Quellsprache MyKa verfügt über die Kontrollstruktur wh ... *wh zur Ausführung von Wiederholungen.

Die Zielsprache soll solche Wiederholungen durch GOTO-Sprünge ersetzen.

Page 32: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

32 Von der Quell- zur Zielsprache

falsch

h

s

nz?wahr

falschnw?

wahr

s

l

0: h 1: s 2: nz? 3: f: goto 10 4: w: nw? 5: f: goto 8 6: w: s 7: goto 4 8: l 9: goto 210: stop

0

1

2

4

10

8

6

9

4

3

5

h s nz 10 nw 8 s 4 l 2

0: h 1: s 2: nz 3: 10 4: nw 5: 8 6: s 7: 4 8: l 9: 210:

h s wh nz wh nw s *wh l *wh

h s wh nz wh nw

s *wh l *wh

h s nz 10 nw 8 s 4 l 20 1 2 3 4 5 6 7 8 9

GOTO-Programme werden in verkürzter Form als Folge von Token (siehe oben) dargestellt.

Page 33: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

33 Übersetzungsvorgang im Detail

h s wh nz wh nw s *wh l *wh

0

s wh nz wh nw s *wh l *wh

1

h

wh nz wh nw s *wh l *wh

2

h s

...

nz wh nw s *wh l *wh

2

h s

2

Page 34: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

34 Übersetzungsvorgang im Detail

wh nw s *wh l *wh

4

h s nz *

2

...

nz wh nw s *wh l *wh

2

h s

2

s *wh l *wh

6

h s nz * nw *

4 2

nw s *wh l *wh

4

h s nz *

4 2

Page 35: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

35 Übersetzungsvorgang im Detail

...

s *wh l *wh

6

h s nz * nw *

4 2

*wh l *wh

7

h s nz * nw * s

4 2

l *wh

8

h s nz * nw 8 s 4

2

*wh

9

h s nz * nw 8 s 4 l

2

Page 36: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

36 Übersetzungsvorgang im Detail

*wh

9

h s nz * nw 8 s 4 l

2

10

h s nz 10 nw 8 s 4 l 2

Page 37: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

37 Transformationsregeln

...

i+1

... s

...

s ...

i

...

...

Solange die Quellcode-Schlange nicht leer ist

wende die passende Transformationsregel an

Das Verhalten des Übersetzers kann präzise mit Hilfe von Transformationsregeln festgelegt werden.

Diese bilden dann die Grundlage für eine Implementierung des Übersetzers.

Markenzähler

Hilfsstapel für Rücksprungmar

ken

Quellcode

Zielcode

Page 38: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

38

Regel für eine elementare Anweisung

Eine elementare Anweisung wird direkt in die Code-Schlange übernommen. Der Markenzähler wird um 1 erhöht.

...

i+1

... s

...

s ...

i

...

...

Page 39: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

39

Regel für die Wiederhole-Anweisung

...

i

...

i ...

wh ...

i

...

...

Die aktuelle Markennummer wird zur späteren Festlegung der Rücksprungadresse in einem Hilfsstapel zwischengespeichert.

Page 40: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

40

Regel für die Wiederhole-Anweisung

...

i+2

... <B> *

...

<B> ...

i

...

...

Die Bedingung wird in die Code-Schlange übernommen. Zusätzlich wird ein Platzhalter (hier *) übernommen, der später mit einer Marke für einen Vorwärtssprung ersetzt wird. Hiermit soll ein Sprung aus der Schleife ermöglicht werden, wenn die Bedingung nicht erfüllt ist. Des weiteren wird der Markenzähler um 2 erhöht. Hiermit soll ein Sprung zur ersten Anweisung innerhalb der Schleife ermöglicht werden, sofern die Bedingung erfüllt ist.

Page 41: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

41

Regel für das Ende einer Wiederholung

...

i+1

... i+1 … k

...

*wh ...

i

... * …

k ...

Die auf einem Hilfsstapel abgelegte Rücksprungmarke wird in die Codeschlange übernommen. Zusätzlich wird das letzte * in der Codeschlange durch den neuen Markenzähler ersetzt. Hierdurch wird der Sprung „aus der Schleife“ realisiert.

Page 42: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

42 Aufgabe

Testen Sie den implementierten Compiler.

Schauen Sie sich die Implementierung an.

Entwerfen Sie Transformationsregeln, die die Übersetzung der folgenden Kontrollanweisung beschreiben:

if <Bed.> th <Anw.> el <Anw.> *if

Ergänzen Sie die Implementierung des Compilers entsprechend der Transformationsregeln.

Page 43: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

43 Teil 5

Aufgaben und Lösungsvorschläge

Page 44: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

44 Aufgabe

Erweitern Sie die Programmiersprache um folgende Kontrollanweisung:

if <Bed.> t <Anw.> e <Anw.> *if

Ergänzen Sie entsprechend den Scanner, den Parser, den Interpreter und den Übersetzer (Codegenerator).

Page 45: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

45 Die Programmiersprache

Zur Vereinfachung der Darstellung verwenden wir abkürzende Bezeichner für die Anweisungen der Programmiersprache.

hinlegenschrittwiederhole solange NichtIstZiegel wiederhole solange NichtIstWand schritt *wiederhole linksDrehen*wiederhole

wh nw if nz th h s el s *if*wh

Page 46: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

46 Erweiterter Scanner-Automat

n

q0

q1

q20

q3

q30

´ ´; chr(13)

q2

q10

´ ´; chr(13); chr(10)

w

*

zw

h

s; l; r; h; a; t; e

Fehlerzustand

w

q4

i f

i

q5

q6

te h

l

Page 47: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

47 Erweiterter Parser-Automat

q0

q1

q2

any / s : any / l :any / r : any / h :any / a :

wh / *wh : popif / *if : pop

any / th : push thth / el : pop

any / wh : push wh

any / if : push if

any / nz : any / nw :

Fehlerzustand

Oberstes Kellerzeichen /

Eingabezeichen: Kelleroperation

else / *wh : any / nz :any / nw :

Page 48: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

48 Zusätzliche Regeln f. d. Interpreter

<A1> ...

wahr

if <B> th <A1> el <A2> *if ...

<A2> ...

falsch

if <B> th <A1> el <A2> *if ...

Page 49: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

49 Aufgabe

Beschreiben Sie die Arbeitsweise des Code-Interpreters mit Hilfe geeigneter Transformationsregeln. Ergänzen Sie hierzu den folgenden Lösungsvorschlag.

Page 50: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

50 Lösungsvorschlag

... >s ...i

... s >...i+1

Page 51: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

51 Lösungsvorschlag

Page 52: Formale Sprachen Teil 3 Klaus Becker 2006. 2 Syntax und Semantik

52 Literaturhinweise

A. Hermes, D. Stobbe: Informatik Zwei, Klett-Verlag 1990.

E. Modrow: Automaten, Schaltwerke, Sprachen. Dümmlers-Verlag 1988.

E. Modrow: Theoretische Informatik mit Delphi. Emu-online 2005.