Softwareparadigmen SS 2016, Übungsblatt P

Ähnliche Dokumente
Softwareparadigmen SS 2015, Übungsblatt P

Softwareparadigmen SS 2018, Übungsblatt P

Programmieren in Java

Konzepte von Programmiersprachen

hue12 January 24, 2017

VU Software Paradigmen / SS 2014

Softwareparadigmen EXP-Compiler Dokumentation v1.1 ( )

Interpreter - Gliederung

17 Interpretation. Scheme-Programme als Datenstruktur. Interpretation von Ausdrücken. Interpretation von Lambda. Lambda als Datenstruktur

Semantik von Programmiersprachen SS 2017

: Einführung in die Programmierung Übungsblatt 11

3.1 Reservierte Wörter

Informatik II - Tutorium 4

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

VU Software Paradigmen

hue13 January 30, 2017

Probeklausur. Musterlösung

3.4 Struktur von Programmen

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

DAP2 Praktikum Blatt 3

13 Reguläre Ausdrücke

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

STATA II: Daten- und Analysevorbereitung (Teil 1)

3 Syntax von Programmiersprachen

Vortrag. Vortrag im Rahmen der Master-Vorlesung Semantik von Programmiersprachen an der FH München, Fachbereich Informatik

SWP Funktionale Programme (2. Teil)

Objektorientierte Programmierung II

Objektorientierte Programmierung mit C++ (WS 2016/2017)

Hello World! Eine Einführung in das Programmieren Das erste Programm

Einführung in Swift. Kapitel. In diesem Kapitel. Für Swift legt Apple verschiedene Ziele fest:

SS2010 BAI2-LBP Gruppe 1 Team 07 Entwurf zu Aufgabe 4. R. C. Ladiges, D. Fast 10. Juni 2010

Classical Themes of Computer Science UE WS 2017/18 Aufgabenblatt Thema: Functional Programming

Build Management Tool?

WS 2011/2012. Robert Giegerich Dezember 2013

Programmieren in Java -Eingangstest-

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Build Management Tool

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

VU Qualitätssicherung in der Softwareentwicklung LV-Nr , SS Aufgabenblatt 1

Vorbereitende Aufgaben

Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt

Installationsanleitung

Einführung in die Programmiersprache C

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

VU Software Paradigmen / SS 2008

Einführung in die Programmiersprache C

Algorithmen und Datenstrukturen I. Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Kurzanleitung Projektverwaltung

Übersicht Shell-Scripten

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)

3 Syntax von Programmiersprachen

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

VU Qualitätssicherung in der Softwareentwicklung LV-Nr , SS Aufgabenblatt 3

Vorsicht bei redundanten und unvollständigen Matches!

Installations- und Updateanleitung LTLexTool

Inhalt Kapitel 11: Formale Syntax und Semantik

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

Einführung in die Programmierung für Computerlinguisten

Inhalt. Kurzanleitung zum Arbeiten mit TU-GitLab

Programmierpraktikum

Interpreter (Hilfsfunktionen)

Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation

Refactoring Transformationen. Martin Freund Januar 2003 Seminar Refactoring in extreme Programming AG Kastens Universität Paderborn

Vorbereitende Aufgaben

Struktur des MicroJava-Compilers

Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Build Management Tool?

Vorbereitende Aufgaben

Lösungshinweise/-vorschläge zum Übungsblatt 9: Software-Entwicklung 1 (WS 2017/18)

Vorsemesterkurs Informatik

Compiler. Blatt 1. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Python Intro I. Vorsemesterkurs Informatik Praktischer Teil WS 2013/14. 1.Oktober Vorkurs Informatik - WS 2013/14

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

Informatik I Übung, Woche 40

hue10 January 15, 2017

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2018/19. Vorbereitende Aufgaben

Sprachdialogsysteme Arbeitsblatt inge - ines Grammatik Editor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Prof. Dr. Uwe Schmidt. 17. August Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2010 (WI h103, II h105, MI h353)

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Puppet. Modul Guide. Alexander Pacnik Karlsruhe,

Implementieren von Klassen

Scala. Funktionale (Zustandslose) Objekte

1 List comprehensions

Programmieren/Algorithmen und Datenstrukturen 1

VU Software Paradigmen / SS 2015

Ein erstes "Hello world!" Programm

Lösungshinweise/-vorschläge zum Übungsblatt 2: Grundlagen der Programmierung (WS 2018/19)

Rückgabewerte von Methoden

1. Probeklausur zur Programmierung I

hue05 November 25, 2016

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung 2. Die Kornshell im Detail 3.Grundlagen der Programmierung

Algorithmen & Datenstrukturen 2 Praktikum 1

Aufgabenblatt 11 Musterlösung

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

Transkript:

Blatt P Seite 1 Softwareparadigmen SS 2016, Übungsblatt P Abgabe: 25. Mai 2016, bis 16:00 Uhr 1. Bilden Sie eine Zweiergruppe mit einem/einer weiteren LV-TeilnehmerIn 2. Erstellen Sie mittels TUGrazOnline ein SVN-Repository für ihre Gruppe nach dem Muster https://svn.tugraz.at/svn/swp2016 <MatrikelNr1> <MatrikelNr2>. Beispiel für StudentInnen mit Matrikelnummern 1601234 und 1606789: https://svn.tugraz.at/svn/swp2016 1601234 1606789 3. Fügen Sie die Studienassistenten (Stephan Frühwirt, Claudio Kirchmair, Benedikt Maderbacher und Thorsten Ruprechter) als Reader hinzu ( Bedienstete wählen ) 4. Beurteilt wird der letzte Commit vor der Deadline. Spätabgaben werden nicht akzeptiert! Aufbau des Repository Im Root-Ordner des Repository muss sich ein Textfile group.txt befinden, welches in genau zwei Zeilen die beiden Namen und Matrikelnummern der Gruppenmitglieder enthält. Formatvorlage (am besten kopieren): Alice Musterfrau, 1601234 Bob Mustermann, 1606789 Auf der Lehrveranstaltungsseite finden Sie ein Framework Framework.zip entpacken Sie dieses in den Root-Ordner. Ihre Lösungen werden automatisiert getestet, halten Sie sich daher bitte an folgende Ordnerstruktur, und stellen Sie sicher, dass ihr Projekt mit SBT compiliert, ausgeführt und getestet werden kann. Vorlage für die Ordnerstruktur: <Repository-URL>/group.txt <Repository-URL>/SWPInterpreter/build.sbt <Repository-URL>/SWPInterpreter/src/main/scala/AST.scala <Repository-URL>/SWPInterpreter/src/main/scala/Value.scala <Repository-URL>/SWPInterpreter/src/main/scala/Interpreter.scala <Repository-URL>/SWPInterpreter/src/main/scala/Parser.scala <Repository-URL>/SWPInterpreter/src/main/scala/SWPInterpreter.scala <Repository-URL>/SWPInterpreter/src/test/scala/SWPInterpreterTests.scala Die Binärdaten in SWPInterpreter/target und SWPInterpreter/project/target sollen nicht mit eingecheckt werden.

Blatt P Seite 2 Parser (15 P.) Implementieren Sie einen Parser der folgende, an EXP angelehnte, Sprache parsen kann. Definieren Sie dazu einen Abstract Syntax Tree mittels case classes (AST.scala) und schreiben sie den dazu passenden Parser mit der Scala Parser Combinator Library (Parser.scala). Die Grammatik ist gegeben als EBNF(Extended Backus Naur Form), es werden folgende Konstrukte verwendet: [ ] 0 oder einmal { } 0 bis n-mal, Verknüpfung Auswahl " " String Token Hinweise: Implementieren Sie die Tokens id und int als RegEx. Sie können alle in der Parser Library vorhanden Hilfsfunktionen verwenden. Besonders hilfreich sind: opt, rep, rep1, repsep und rep1sep. Grammatik id = (a-z)(a-z a-z 0-9)*; int = 0 (1-9)(0-9)* -(1-9)(0-9)*; program = funcdecls, expression; funcdecls = "{", { funcdecl }, "}" funcdecl = "fun", id, "(", [ { id, "," }, id ], ")", "=", expression, ";"; expression = cond function int list variable; cond = "if", predicate, "then", expression, "else", expression; predicate = id, "?", "(", [ { expression, "," }, expression ], ")"; function = id, "(", [ { expression, "," }, expression ], ")"; list = "[", [ { expression, "," }, expression ], "]"; variable = id;

Blatt P Seite 3 Interpreter für eingebauten Funktionen (10 P.) Schreiben Sie einen Interpreter der folgende Untermenge der Sprache(EXP mit Listen und Integer) beherrscht: Eingebaute Funktionen add(a,b) a + b negate(a) a ( 1) first(xs) xs.head rest(xs) xs.tail build(x,xs) x :: xs Prädikate eq?(a,b) a = b lt?(a,b) a < b Konditionale if p then a else b a wenn p = T if p then a else b b wenn p = F Implementieren Sie dazu den Value AST sowie den dazu gehörigen Prettyprinter (AST.scala) und die interpret Funktion(Interpreter.scala). Achten Sie bei der Stringgenerierung darauf das die Vorgaben genau eingehalten werden, da wir diesen Output für unsere Tests verwenden! User definierte Funktionen (10 P.) Erweitern Sie den Interpreter um User definierte Funktionen. Die Funktionen sollen wie im Skriptum auf Seite 59 beschrieben mit einer call-by-value Semantik interpretiert werden.

Blatt P Seite 4 Let Bindings (5 P.) Erweitern Sie den Interpreter um Let Bindings. Dazu wird die Grammatik um folgende Expressions ergänzt: expression =... let; let = "let", { binding }, "in", expression, "end"; binding = "val", variable, "=", expression, ";"; Semantik Mit let können lokale Variablen definiert werden. Die Variablen die nach einem let erstellt werden sollen in der Expression nach in verwendet werden können. Variablen sollen auch in bindings die später in der gleichen let Expression definiert werden, verwendet werden können. Beispiel let val a = 10; val b = add(a,22); in add(a,b) end Soll zu 42 evaluieren. Refs (10 P.) Erweitern Sie den Interpreter um Referenzen auf veränderbare Speicherstellen. Dazu wird die Grammatik um folgende Expressions ergänzt: expression =... deref assign sequence deref = "!", variable; assign = variable, ":=", expression; sequence = "{" {expression, ";"}, expression "}"; Neue eingebaute Funktionen ref(a) Erwartet einen Wert a, erstellt eine neue Speicherstelle in der a gespeichert ist und gibt die Adresse/Referenz dieser Speicher stelle zurück. Semantik der neuen Operatoren! erwartet eine Referenz und gibt den an dieser Stelle gespeicherten Wert zurück. := erwartet auf der linken Seite eine Referenz und auf der rechten Seite einen Wert. Der Wert in der Speicherstelle wird auf den neuen Wert gesetzt. Eine assign Expression evaluiert zum Wert der zugewiesen wurde. Mit ; können mehrere Expressions nacheinander ausgeführt werden. Es werden alle Expressions evaluiert und Seiteneffekte wie := ausgeführt. Eine sequence Expression evaluiert zum Ergebnis der letzten Expression.

Blatt P Seite 5 Beispiel let val x = ref(add(5,1)); val y = ref(10); in { x := add(!y, 20); y := 100;!x } end Soll zu 30 evaluieren. Hinweis Sie können zum speichern der veränderbaren Speicherstellen eine collection.mutable.map verwenden. Die Keys für die Map können Sie mit einer mutable Variable erzeugen z.b. var refcounter:int = 0 Sie müssen nicht mehr verwendete Speicherstellen nicht aus der Map entfernen. Framework Auf der Homepage finden Sie ein SBT Project SWPInterperter. In diesem ist eine build.sbt Datei sowie unter src/main/scala ein Grundgerüst für die Aufgabe enthalten. Um das Projekt zu starten müssen Sie zuerst SBT installieren, dann können Sie die SBT Konsole starten indem sie eine Komandozeile im Projektverzeichnis(Das Verzeichnis in dem sich die build.sbt befindet) öffnen und sbt eingeben. Zum compilieren geben Sie compile ein. Das erste Compilieren kann etwas länger dauern da, zuerst Scala und die notwendigen Libraries heruntergeladen und installiert werden müssen. Um das Programm in test.exp zu interpretieren geben sie run test.exp ein.

Blatt P Seite 6 Tests In der Datei src/test/scala/swpinterpretertests finden sie einige Tests um ihr Program zu testen. Diese Tests decken nicht alle Funktionalitäten ab sondern sollen zur Orientierung dienen. Nutzten Sie diese Tests auch um zu überprüfen das ihre Ausgabe Formatierung korrekt ist. Sie können auch weitere Tests zu SWPInterpreterTests hinzu fügen um ihre Implementierung zu testen, diese Tests können sie auch gerne über die Newsgroup, oder auf anderem Weg, mit anderen Studierenden teilen. Tests ausführen Die Test können in der SBT Konsole ausgeführt werden. Leeres Framework: > test [info] SWPInterpreterTests: [info] - Parser minimal example *** FAILED *** [info] scala.notimplementederror: an implementation is missing... Vollständig Implementiert: > test [info] SWPInterpreterTests: [info] - Parser minimal example... [info] Tests: succeeded 8, failed 0, canceled 0, ignored 0, pending 0 [info] All tests passed. [success] Total time: 7 s, completed Apr 20, 2016 3:50:47 PM Viel Erfolg!