Organisatorisches (Ü KW 15)

Beispiel: C-Compiler

Inhalt der Vorlesung

Konzepte von Programmiersprachen

realisieren durch

Hilfsmittel:

Einleitung: Sprachverarbeitung

Literatur

Anwendungen von Techniken des Compilerbaus

Organisation der Vorlesung

Beispiel: Interpreter f. arith. Ausdrücke

data Exp = Const Integer 
         | Plus Exp Exp | Times Exp Exp
    deriving ( Show )

ex1 :: Exp
ex1 = 
  Times ( Plus ( Const 1 ) ( Const 2 ) ) ( Const 3 )

value :: Exp -> Integer
value x = case x of
    Const i -> i
    Plus x y -> value x + value y
    Times x y -> value x * value y

das ist syntax-gesteuerte Semantik:

Wert des Terms wird aus Werten der Teilterme kombiniert

Beispiel: lokale Variablen und Umgebungen

data Exp = ... | Let String Exp Exp | Ref String
ex2 :: Exp
ex2 = Let "x" ( Const 3 ) 
     ( Times ( Ref "x" ) (Ref "x" ) )
type Env = ( String -> Integer )
extend n w e = \ m -> if m == n then w else e m
value :: Env -> Exp -> Integer
value env x = case x of
    Ref n -> env n
    Let n x b -> value (extend n (value env x) env) b
    Const i -> i
    Plus x y -> value env x + value env y
    Times x y -> value env x * value env y
test2 = value (\ _ -> 42) ex2

Bezeichner sind Strings — oder nicht?

Datentypen für Folgen (von Zeichen)

Verstecken von Implementierungsdetails

Verwendung standardisierter Namen

Einsparung von Konstruktor-Aufrufen

Übung (Haskell)

Übung (Interpreter)

Übung (effiziente Imp. von Bezeichnern)

Inferenz-Systeme

Motivation

Definition

ein Inferenz-System \(I\) besteht aus

eine Ableitung für \(F\) bzgl. \(I\) ist ein Baum:

Def: \(I \vdash F\) \(:\iff\) \(\exists\) \(I\)-Ableitungsbaum mit Wurzel \(F\).

Regel-Schemata

Inferenz-Systeme (Beispiel)

Primalitäts-Zertifikate

Inferenz von Typen

Inferenz von Werten

Umgebungen (Spezifikation)

Umgebungen (Implementierung)

Umgebung ist (partielle) Funktion von Name nach Wert

Realisierungen: type Env = String -> Integer

Operationen:

Beispiel

lookup (extend  "y" 4 (extend "x" 3 empty)) "x"

entspricht \((\emptyset[x:=3][y:=4]) x\)

Übung

  1. Primalitäts-Zertifikate

    • welche von \(2,4,8\) sind primitive Wurzel mod 101?

    • vollst. Primfaktorzerlegung von 100 angeben

    • ein vollst. Prim-Zertifikat für 101 angeben.

    • bestimmen Sie \(2^{(101-1)/5} \mod 101\) von Hand

      Hinweise: 1. das sind nicht 20 Multiplikationen,

      2. es wird nicht mit riesengroßen Zahlen gerechnet.

  2. Geben Sie den vollständigen Ableitungsbaum an für die Auswertung von

    let {x = 5} in let {y = 7} in x

Semantische Bereiche

Continuations

Aufgaben

  1. Bool im Interpreter

    • Boolesche Literale

    • relationale Operatoren (==, <, o.ä.),

    • Inferenz-Regel(n) für Auswertung des If

    • Implementierung der Auswertung von if/then/else mit with_bool,

  2. Striktheit der Auswertung

    • einen Ausdruck e :: Exp angeben, für den value undefined e eine Exception ist (zwei mögliche Gründe: nicht gebundene Variable, Laufzeit-Typfehler)

    • mit diesem Ausdruck: diskutiere Auswertung von let {x = e} in 42

  3. bessere Organisation der Quelltexte

    • Cabalisierung (Quelltexte in src/, Projektbeschreibungsdatei cb.cabal), Anwendung: cabal repl usw.

    • separate Module für Exp, Env, Value,

Unterprogramme

Beispiele

Interpreter mit Funktionen

Semantik (mit Funktionen)

Let und Lambda

Mehrstellige Funktionen

…simulieren durch einstellige:

Semantik mit Closures

Closures (Spezifikation)

Rekursion?

Testfall (2)

let { t f x = f (f x) }
in  let { s x = x + 1 }
    in  t t t t s 0

Repräsentation von Fehlern

Übungen

  1. eingebaute primitive Rekursion (Induktion über Peano-Zahlen):

    implementieren Sie die Funktion fold :: r -> (r -> r) -> N -> r

    Testfall: fold 1 (\x -> 2*x) 5 == 32

    durch data Exp = .. | Fold .. und neuen Zweig in value

    Wie kann man damit die Fakultät implementieren?

  2. alternative Implementierung von Umgebungen

    • bisher type Env = Id -> Val

    • jetzt type Env = Data.Map.Map Id Val oder Data.HashMap

    Messung der Auswirkungen: 1. Laufzeit eines Testfalls, 2. Laufzeiten einzelner UP-Aufrufe (profiling)

Lambda-Kalkül (Wdhlg.)

Motivation

1. Modellierung von Funktionen:

2. Notation mit gebundenen (lokalen) Variablen, wie in

Der Lambda-Kalkül

Lambda-Terme

Eigenschaften der Reduktion

Beziehung zur Semantik des Interpreters

Daten als Funktionen

Lambda-Kalkül als universelles Modell

Fixpunkt-Kombinatoren (Motivation)

Fixpunkt-Kombinatoren (Implementierung)

Lambda-Berechenbarkeit

Satz: (Church, Turing)

Kodierung von Zahlen nach Church

Übung Lambda-Kalkül (I)

Übung Lambda-Kalkül (II)

folgende Aufgaben aus H. Barendregt: Lambda Calculus