13.07.2015 Aufrufe

Theorie der Programmierung I Eine ungetypte ... - von Lars Friedrich

Theorie der Programmierung I Eine ungetypte ... - von Lars Friedrich

Theorie der Programmierung I Eine ungetypte ... - von Lars Friedrich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Theorie</strong> <strong>der</strong> <strong>Programmierung</strong> I(Mitschrift <strong>von</strong> <strong>Lars</strong> <strong>Friedrich</strong>: email@lars-friedrich-home.de)18.10.05Inhalt: Semantik <strong>von</strong> ProgrammiersprachenGenauer: Methoden zur Beschreibung <strong>der</strong> SemantikUnter Semantik verstehen wir: Alles, was über die kontextfreie Syntax hinausgeht, d.h.1) die Kontextbedingungen (= „statische Semantik“), z.B.o ein Name muss deklariert sein, „bevor“ er benutzt wirdo eine Funktion (Prozedur, Methode) darf nur mit Parametern vom „richtigenTyp“ aufgerufen werden2) die Beschreibung des Laufzeitverhaltens (eigentliche Semantik o<strong>der</strong> „dynamischeSemantik“)Vergleiche die Phasen eines Comilers:1) gehört noch zur Compile-Zeit („semantische Analyse“)2) ist die LaufzeitVorgehensweise:Methoden werden an einer „idealisierten“ Programmiersprache eingeübt. Diese Sprache wirdSchritt für Schritt eingeführt:1) <strong>ungetypte</strong> funktionale Sprache TP I2) einfaches Typsystem TP I3) polymorphes Typsystem (ML) TP I4) imperative Konstrukte TP II5) objektorientierte Konstrukte TP IIÜber die Semantikbeschreibung hinaus werden Eigenschaften <strong>der</strong> Programmierspracheformuliert und bewiesen, z.B. Typsicherheit.„Wohlgetypte Programme können nicht stecken bleiben“, d.h. wenn ein Programm vomCompiler als wohlgetypt akzeptiert wird, dann können zur Laufzeit keine Typfehler mehrauftreten (also ist zur Laufzeit keine Typüberprüfung mehr nötig).<strong>Eine</strong> <strong>ungetypte</strong> funktionale SpracheVorgegeben seien:o eine unendliche Menge Id <strong>von</strong> Namen (Identifier) id (genaue Definition unwichtig,z.B. Id=Menge aller Wörter über {a-z, 0-9}, die mit einem Buchstaben beginneno die Menge Int aller (Darstellung <strong>von</strong>) ganzen Zahlen (Integers) no die Menge Bool = {true, false} <strong>der</strong> boolschen Werte bDarauf aufbauend sei die (kontextfreie) Syntax definiert:o die Menge Op <strong>der</strong> binären Operationen op ist definiert durch:o op ::= + | - | * | / | mod | (arithmetische Operatoren)o < | > | ≤ | ≥ | = (Vergleichsoperatoren)o die Menge Const <strong>der</strong> Konstanten c durch:o c ::= ()unit-Elemento | b boolsche Werteo | n ganze Zahlo | op Operator


o die Menge Exp <strong>der</strong> Ausdrücke (Expressions) e durch:o e ::= cKonstanteo | id Nameo | e 1 e 2 Applikationo | λ id.e 1 λ-Abstraktiono | if e 0 then e 1 else e 2 bedingter Ausdrucko | let id = e 1 in e 2 let-AusdruckDiese kontextfreie Grammatik (KFG) ist als Definition einer so genannten „abstraktenSyntax“ aufzufassen, d.h. es werden durch die KFG keine Zeichenreihen definiert, son<strong>der</strong>nbereits Syntaxbäume. Mit an<strong>der</strong>en Worten: wir nehmen an, dass die Syntaxanalyse (Parser)bereits stattgefunden hat.Vorteil:Syntaktische Details wie Klammerung und Prioritäten <strong>von</strong> Infixoperatorenkönnen in <strong>der</strong> abstrakten Syntax ignoriert werden.Für Beispiele: Einige Worte zur konkreten Syntax: Die Applikation hat höchste Priorität(d.h. sie bindet stärker als λ, if_then_else_ o<strong>der</strong> let_in_) und istlinksassoziativ, d.h. aufeinan<strong>der</strong> folgende Applikationen gelten als„linksgeklammert“: e 1 e 2 e 3 steht für (e 1 e 2 )e 3 , + 1 2 steht für (+ 1) 2Beachte:Wenn eine λ-Abstraktion als linker o<strong>der</strong> rechter Teil einer Applikationauftritt, muss sie in Klammern stehen, z.B. (λx. + x 1) 2Die so definierte Sprache (mit Startsymbol e) bezeichnen wir mit L 1 . Mitunter betrachten wireine Teilsprache L 0 ⊆ L 1 , definiert durch:e ::= id | e 1 e 2 | λid. e 1 (L 0 besitzt also keine Konstanten)L 0 heißt reiner (<strong>ungetypte</strong>r) λ-Kalkül. <strong>Eine</strong> Sprache wie L 1 , die aus L 0 durch Hinzunahmeeiniger Konstanten entsteht, heißt angewandter (<strong>ungetypte</strong>r) λ-Kalkül.Operationale SemantikZunächst: small step-SemantikIdee: Ein Ausdruck wird solange umgeformt, („vereinfacht“) bis man einen Werterhält.zu klären: Was versteht man unter einem Wert?Wie sehen die einzelnen Umformungsschritte aus?Vorgegeben: <strong>Eine</strong> Menge Exn <strong>von</strong> Exeptions exn,z.B. Exn {Division_by_zero, Overflow, …}Definition: Ein small step ist eine „Formel“ <strong>der</strong> Gestalt ee’ o<strong>der</strong> eexn.Ziel: Genau festlegen, welche small steps erlaubt sind.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!