Konzepte von Programmiersprachen

Ähnliche Dokumente
Ausarbeitung des Interpreter Referats

Programmierung und Modellierung

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12)

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Prinzipien der Softwareentwicklung S. Strahringer

Grundprinzipien der funktionalen Programmierung

Monaden in anderen Programmiersprachen

Funktionale Programmierung

Einführung in ActionScript

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Funktionale Programmierung mit Haskell

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Spracherweiterungen von C# 3.5

Funktionale Programmierung mit Haskell

Modul 122 VBA Scribt.docx

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Kontrollstrukturen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

1 Polymorphie (Vielgestaltigkeit)

Verteilte Systeme/Sicherheit im Internet

Verträge für die funktionale Programmierung Design und Implementierung

Java Einführung Operatoren Kapitel 2 und 3

Ruby. Erfinder: Yukihiro Matsumoto Japan 1993 Einflüsse: Smalltalk Perl Eigenschaften: Objektorientiert Interpretiert

Multimedia im Netz Wintersemester 2011/12

Java Tipps für Lehrer. Table des matières. Einleitung

12. ArcView-Anwendertreffen Workshop Programmierung in ArcGIS. Daniel Fuchs. Wo kann eigene Programmierung in ArcGIS verwendet werden?

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Institut für Informatik Christian-Albrechts-Universität zu Kiel. Borland Delphi. Einführung in die Programmiersprache

VBA-Programmierung: Zusammenfassung

Mul$media im Netz (Online Mul$media) Wintersemester 2014/15. Übung 02 (Nebenfach)

Keine Angst vor Puppet 4. Secure Linux Administration Conference 2015 Martin Alfke

Humboldt Universität zu Berlin Institut für Informatik Seminar Systementwurf WS 05/06 Vortrag: Mike Herzog. AsmL

Einfache Rechenstrukturen und Kontrollfluss II

Kapitel 7: Benutzerdefinierte Datentypen

Lösungvorschlag zum Übungsblatt 6: Software-Entwicklung I (WS 2007/08)

Java Kurs für Anfänger Einheit 5 Methoden

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Workshop: ASURO-Programmieren in C

Jürgen Bayer. Anonyme Methoden, Lambda-Ausdrücke und Ausdrucksbäume in.net

Java-Schulung Grundlagen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

STM32F429-Basic Version : C.01

Einführung in die Informatik Grammars & Parsers

Funktionale Programmierung. Frank Adler

Formale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler

Erster Bug: eine Motte

MIKROPROZESSOR PROGRAMMIERUNG 8. VORLESUNG. LV-Nr SS INSTITUT FÜR ELEKTRONIK BIT

Deklarationen in C. Prof. Dr. Margarita Esponda

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR

Container-Klassen in Delphi

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

Einführung in VisualBasic for Applications. Stefan Mahlitz

Klausur in Programmieren

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Projekt Sprachdialogsysteme SoSe Voice XML - Teil II. Cristina Vertan, Walther v. Hahn

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Sin-Funktion vgl. Cos-Funktion

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert Christoph Knabe

1 Syntax von Programmiersprachen

Objektrelationale und erweiterbare Datenbanksysteme

Proseminar Funktionales Programmieren. Stephan Kreutzer

PHP 4. E i n e K u r z e i n f ü h r u n g. Vortragender: Kevin Bransdor Datum: Folie 1

Typbasierte Analyse von JavaScipt

BAUINFORMATIK. SS 2013 Vorlesung 1 Johannes Lange

Binärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T:

Software Developer Kit (SDK) für das SOUNDLIGHT USBDMX-ONE Interface

Einführung in die Programmierung

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Übersicht Programmablaufsteuerung

Klassenbeziehungen & Vererbung

Methodische Grundlagen des Software Engineering - Übung 9

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Einstellige binäre Addierschaltung (Addierer)


Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Grundlagen von C. Ausarbeitung von Jonas Gresens

C# im Vergleich zu Java

Einführung in Javadoc

Funktionale Programmierung

Informatik ist viel mehr als Delphi-Programmierung!


Seminar Scala SS2010, Einführung. R. Schiedermeier Fakultät 07 für Informatik und Mathematik

Komponente PortIO für Delphi 5.0

E-PRIME TUTORIUM Die Programmiersprache BASIC

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe


php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

The TLC Model Checker

Programmierparadigmen

Java Schulung (Java 2 Java Development Kit 5 / 6)

Transkript:

Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17

Inhalt Let Ausdrücke Syntax Semantik Implementierung Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 2 / 17

ÁÒØ ÖÔÖ Ø Ö ß ÓÑÔ Ð Ö ÁÒØ ÖÔÖ Ø Ö Ê Ð ÏÓÖÐ ÁÒÔÙØ»ÇÙØÔÙØ Ó ÖÓÒØ Ò ËÌ ÁÒØ ÖÔÖ Ø Ö Ò Û Ö ÓÑÔ Ð Ö Ê Ð ÏÓÖÐ ÁÒÔÙØ»ÇÙØÔÙØ Ó ÖÓÒØ Ò ËÌ Åº Ó ÓÑÔ Ð Ö ÝØ Ó Å Ò Ò Û Ö Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 3 / 17

Syntax Syntax Grammatik Programm ::= Expression Expression ::= Number (Expression, Expression) zero?(expression) if Expression then Expression else Expression Identifier let Identifier = Expression in Expression Identifier ::= x y... Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 4 / 17

Syntax Syntax Beispiele Beispiel 1: let x = 5 in let y = 2 in -(x,y) Beispiel 2: let x = 5 in let y = 2 in if zero? (x) then y else -(x,y) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 5 / 17

Syntax Syntax Beispiele Beispiel 3: let y = 2 in let x = 1 in let y = 0 in if zero? (y) then x else 10 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 6 / 17

Syntax Syntax Datentypen für Ausdrücke / AST (define-datatype expression expression? (const-exp (num number?)) (diff-exp (exp1 expression?) (exp2 expression?)) (zero?-exp (exp1 expression?)) (if-exp (exp1 expression?) (exp2 expression) (exp3 expression?)) (var-exp (var identifier?)) (let-exp (var identifier?) (exp1 expression?) (body expression?))) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 7 / 17

Semantik Werte Die Menge der Werte Val besteht aus: Boolean Integer d.h. Val = Boolean + Integer. Interface für die Werte num-val : Int Val bool-val : Bool Val val->num : Val Int val->bool : Val Bool Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 8 / 17

Semantik Umgebung Eine Umgebung ρ hat den Typ: Hierbei gelte: [] steht für die leere Umgebung ρ : Indetifier Val [x = v]ρ steht für die Umgebung, in der x dem Wert val zugeordnet ist, d.h. für (extend-env x v ρ) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 9 / 17

Ausdrücke Interface für Ausdrücke const-exp : Int Exp zero?-exp : Exp Exp if-exp : Exp Exp Exp Exp diff-exp : Exp Exp Exp var-exp : Var Exp let-exp : Var Exp Exp Exp value-of : Exp Env Val Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 10 / 17

Spezifikation von value-of (1/4) Konstanten (value-of (const-exp n) p) = (num-val n) Variablen (value-of (var-exp x) p) = (apply-env p x) Diff Ausdruck (value-of (diff-exp e1 e2) p) = (num-val (- (val->num (value-of e1 p)) (val->num (value-of e2 p)))) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 11 / 17

Spezifikation von value-of (1/4) Beispiel Abkürzung von <<-(x,5)>> für AST, der den Ausdruck darstellt, d.h. <<-(x,5)>> = (exp-diff (var-exp "x") (const-exp 5)) Beispiel: (value-of <<-(x,5)>> [x=3]) = (num-val (- (val-num (value-of <<x>> [x=3])) (val-num ((value-of <<5>> [x=3]))))) = (num-val (- (val->num (apply-env [x=3] x)) (val->num (num-val 5)))) = (num-val (- (val->num (num-val 3)) (val->num (num-val 5)))) = (num-val (- 3 5)) = (num-val -2) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 12 / 17

Spezifikation von value-of (2/4) (value-of e p) = v (value-of (zero?-exp { e) p) (bool-val #t) if (val-num v) = 0 = (bool-val #f) if (val-num v) 0 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 13 / 17

Spezifikation von value-of (3/4) (value-of e1 p) = v (value-of (if-exp { e1 e2 e3) p) (value-of e2 p) if (val-bool v) = #t = (value-of e3 p) else Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 14 / 17

Spezifikation von value-of (4/4) (value-of e p) = v (value-of (let x = e in body) p) = (value-of body [x = v]p) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 15 / 17

Semantik Implementierung Implementierung von value-of ; value-of : exp x env -> val (define value-of (lambda (exp env) (cases expression exp (const-exp (num) (num-val num)) (var-exp (var) (aplly-env env var)) (diff-exp (e1 e2) (let ((v1 (value-of e1 env)) (v2 (value-of e2 env))) (let ((n1 (val->num v1)) (n2 (val->num v2))) (num-val (- n1 n2))))) (zero?-exp (e) (let ((n (val->num (value-of e env)))) (if (zero? n) (bool-var #t) (bool-var #f))))...))) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 16 / 17

Semantik Implementierung Implementierung von value-of ; value-of : exp x env -> val (define value-of (lambda (exp env) (cases expression exp... (if-exp (e1 e2 e3) (let ((v1 (value-of e1 env))) (if (val->bool v1) (value-of e2 env) (value-of e3 env)))) (let-exp (x e body) (let ((v (value-of e env))) (value-of body (extend-env x v env))))))) Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 17 / 17