Esterel. Synchronous Programming Language

Größe: px
Ab Seite anzeigen:

Download "Esterel. Synchronous Programming Language"

Transkript

1 Esterel Synchronous Programming Language

2 Inhalt Abstract Einleitung Entstehung Zeiteinteilung Struktur und Aufbau Module Zustände Kontrollstrukturen Ausnahmebehandlung Statements Interface Deklarationen Relationen Plain Esterel Signalinterfaceerweiterung Await Immediate watchdog Schleifen Ausnahmebehandlung Timeout Copymodule Hostsprache Semantik Intuitive Semantik Formale Verhaltenssemantik Modulableitung Induktionsregeln Ausführungssemantik Signale und Signalspeicher Beispielanwendung Compiler Fazit Literaturverzeichnis Codebeispiele Seite 2 Esterel Gregor Barth, Philipp Schröter

3 Abstract Diese Ausarbeitung behandelt die Programmiersprache Esterel, welche zur Kontrolle reaktiver Systeme entwickelt wurde. Nach einer kurzen Einleitung, die den Kontext von Esterel erläutert, wird die Entstehungsgeschichte von Esterel dargestellt. Im dritten Kapitel wird die Zeiteinteilung von Esterel erklärt, welche für Esterel eine große Rolle spielt. Anschließend wird die Syntax von Esterel vorgestellt, zuerst in der Basic Variante, danach die Erweiterungen, die in Plain Esterel hinzugekommen sind. Im nachfolgenden sechsten Kapitel wird die Interaktion von Esterel mit der Hostsprache behandelt. Das siebte Kapitel widmet sich der Semantik von Esterel und stellt einige Semantiken anhand von Beispielen dar. Darauf folgt dann ein erläutertes Beispiel für ein Programm in Esterel. Anschließend werden einige Compiler für Esterel vorgestellt und zum Schluss ein Fazit gezogen. Esterel Gregor Barth, Philipp Schröter Seite 3

4 1. Einleitung Esterel ist eine deterministische, nebenläufige und imperative Programmiersprache, die auf Synchronisierung ausgelegt ist und speziell entwickelt wurde, um mit reaktiven Systemen zu interagieren. Der Hauptunterschied zu anderen nebenläufigen Programmiersprachen ist, dass eine festgelegte Annahme zur Synchronisation getroffen wurde. Die Messung der Zeit wird hierbei aber nicht in echter Zeit gemessen, sondern in Events. Esterel ist unabhängig nicht lauffähig, da es keine komplexen Datentypen und Operationen beherrscht und bedarf daher einer sogenannten Hostsprache. Reaktive Systeme sind gemäß Harel und Pnueli [1] Softwaresysteme, die in durchgehender Interaktion mit ihrer Umgebung stehen und auf Eingaben aus dieser Umgebung durch Ausgaben reagieren. Für diese Art von Systemen gibt es viele Beispiele, z. B. Digitaluhren oder Maus- und Tastaturtreiber. Eingabe Interface Ausgabe Reaktiver Kernel Datenverarbeitung Bild 1: Reaktive Systeme Das Interface ist für die Kommunikation zur Umgebung zuständig, dabei nimmt es den Input entgegen, welcher in digitale Signale umgewandelt wird und sendet den Output aus. Dabei liest es Sensoren aus, behandelt Interrupts und steuert Effektoren, z. B. Greifarme von Robotern. Der reaktive Kernel (reactive kernel) enthält die Logik des Systems. Es entscheidet, welche Operationen durchgeführt werden und behandelt die Ein- und Ausgaben. Programme in Esterel übernehmen diesen Teil des reaktiven Systems. Die Verarbeitung der Daten (data handling), nach Maßgabe des reaktiven Kernels, wird auf der dritten Schicht durchgeführt. Seite 4 Esterel Gregor Barth, Philipp Schröter

5 2. Entstehung Esterel wurde in den frühen Achtziger Jahren entwickelt, als Jean-Paul Marmorat und Jean-Paul Rigault mit den zur Verfügung stehenden Programmiersprachen für ihre Arbeit an einem Roboterauto nicht zufrieden waren. Insbesondere die Notwendigkeit zur Verwendung von speziellen Ausdrücken für den Umgang mit Zeit erfüllte nicht ihre Erwartungen, daher entwarfen sie einen Vorschlag für eine eigene Programmiersprache. Gérard Berry, der zur gleichen Zeit am Lambda-Kalkül und denotationeller Semantik arbeitete, prüfte den Vorschlag auf mathematische Sinnhaftigkeit. Zusammen mit Sabine Moisan und Jacques Camerini untersuchte Berry den Vorschlag weiter. Jacques Camerini beschrieb die primitiven Datentypen und entwickelte das Prozesskalkül, welches anfangs aber noch nicht zufriedenstellend funktionierte. Mithilfe des Buchs Structural Operational Semantics von Gordon Plotkin konnten die intrinsischen Semantiken beschrieben werden und gleichzeitig bot es eine andere Möglichkeit, Nebenläufigkeit zu betreiben als Verschränkung von Prozessen und der Kommunikation zwischen diesen. Gérard Berry und Laurent Cosserat nahmen sich des Problems der primitiven Datentypen an und entwickelten auch eine Weg, den Zugriff und die Kommunikation augenblicklich zu verbreiten. Der erste lauffähige Prototyp eines Esterel Compilers wurde durch Verwendung eines Algorithmus von Janusz Brzozowski erstellt, der es ermöglicht, jede Art von regulärem Ausdruck in einen Automaten zu überführen. Dieser Automat kann dann wiederum in einen endlichen Automaten überführt werden. Philippe Couronné und Gérard Berry überarbeiteten diesen Prototyp zwischen 1985 und 1986 zur zweiten Version des Esterel Compilers. Diese Version von Esterel wurde bereits für akademische als auch für industrielle Zwecke eingesetzt. Georges Gonthier führte Ausnahmen als Integer und das Abbilden von Synchronisierung sowie eine effizientere operationale Semantik und verbesserte Kompilieralgorithmen ein. Die dritte Version des Esterel Compilers wurde mit diesen Verbesserungen und Bit-Sets als Status zwischen den Jahren 1987 bis 1988 von Raphaël Bernhard, Gérard Berry, Frédéric Boussinot, Annie Ressouche, Jean-Paul Rigault und Jean-Marc Tanzi erstellt. Als Status diente davor Programmtext. Der französische Hersteller für Jets und Flugzeuge Dassault Aviation erwies sich als Early Adopter dieser Version des Compilers. Die Architektur und einiges an Bytecode sind seit dieser Zeit unverändert. Zu dieser Zeit fand Esterel oft Anwendung und funktionierte mit kleinen bis mittleren Programmen gut, zeigte jedoch Schwächen bei größeren Programmen. Dies machte sich durch ein Anschwellen des Zustandsraums bemerkbar. Die vierte Version des Esterel Compilers wurde im Hinblick auf die Explosion des Zustandsraums und auf die Verwendung mit Controller entwickelt. Die Behebung von Ersterem wurde durch die Betrachtung von Netzlisten 1 unterstützt. Der Vorläufer des aktuell genutzten xes Tools war der von Jean-Paul Marmorat und Jean-Pierre Paris entwickelte Grafiksimulator und Debugger xsimul. Die vierte Compilerversion wurde ab 1992 ausgeliefert. Der größte Vorteil der vierten Version des Esterel Compilers brachte mit der Eindämmung der explosionsartigen Ausbreitung des Zustandsraums auch eine Einschränkung hinsichtlich zyklischer Programme mit sich. Alle Programme, die nicht azyklisch waren, wurden vom Compiler abgewiesen. Um diese Einschränkung zu zügeln, wurden sogenannte konstruktive Semantiken in die fünfte Version eingeführt. 1 Textuelle Beschreibungen von elektrischen Verbindungen zwischen Bauelementen Esterel Gregor Barth, Philipp Schröter Seite 5

6 Aktuell wird die sechste Version des Esterel Compilers entwickelt, welche großes Augenmerk auf Modularität legen soll. Dies soll durch separates kompilieren von unterteilten Kreisläufen geschehen, die dann zusammengefügt und erst als Ganzes optimiert werden. 3. Zeiteinteilung Ein Kernelement von Esterel ist die Synchronitätshypothese [2]. Diese besagt, dass alle Instruktionen augenblicklich ausgeführt werden und keine Verarbeitungszeit benötigt wird. Hier muss beachtet werden, dass die letzte Aussage im eingeschränkten Sinne gilt. Alle Instruktionen benötigen keine Ausführungszeit im Vergleich zur äußeren Umgebung, welche sich nicht verändert, während die aktuelle Esterel-Instruktion ausgeführt wird. Ebenso wird angenommen, dass ein Sub-Prozess keine Ausführungszeit aus der Sicht eines anderen Sub-Prozesses benötigt. Unterstützt wird dies durch die Eigenschaften synchroner Sprachen, dass Prozesse Events anderen Prozessen via Broadcast mitteilen und somit alle Prozesse die gleichen Informationen besitzen. Durch diese sofortige Ausführung von Instruktionen können zeitlich abhängige Events sehr präzise verarbeitet werden. Esterel nutzt ein synchrones und diskretes Zeitmodell. Die kleinste atomare Zeiteinheit in Esterel ist ein Moment (Instant). Alle zeitlosen Instruktionen und Events werden daher in einem einzelnen Moment abgearbeitet. Instruktionen, für die eine Verarbeitungszeit definiert wird, dauern exakt diese Zeit an. Ein Beispiel hierfür wäre die await-anweisung (siehe weiter unten). 4. Struktur und Aufbau Die Grundlage von Esterel ist Basic Esterel, welches die Grundmenge an Ausdrücken dieser Sprache darstellt. Zusätzlich gibt es Plain Esterel, welches zusätzliche Befehle bietet und einige Befehle kürzer fasst und durch andere, semantisch äquivalente Ausdrücke ersetzt. Die nachfolgende Syntax in diesem Kapitel bezieht sich ausschließlich auf Basic Esterel, außer es ist etwas anderes angegeben. 4.1 Module Programme in Esterel bestehen aus Modulen, welche die Deklarationen und Anweisungen enthalten. Es wird mit dem Schlüsselwort module und einem Bezeichner deklariert. module Mod : declaration body Beispielcode 1: Module Bevor Objekte verwendet werden können, müssen sie deklariert werden. Welche Objekte genau zur Auswahl stehen, wird in den nachfolgenden Kapiteln behandelt, ebenso wie die ausführbaren Anweisungen, die den Rumpf des Moduls ausmachen. Anweisungen können sowohl aus Basic als auch aus Plain Esterel stammen. Im Gegensatz zu Variablen können Signale, die in einem Modul deklariert werden, auch außerhalb dieses Moduls global verwendet werden. Seite 6 Esterel Gregor Barth, Philipp Schröter

7 4.2 Zustände Signale, welche innerhalb von Esterel große Bedeutung haben, haben zu jedem Zeitpunkt einen definierten Zustand, von denen es zwei mögliche gibt. Wenn sie in dieser Zeiteinheit gesendet werden, sind sie präsent (present). Wenn dies nicht der Fall ist, sind sie abwesend (absent). Ein Signal gilt in der gesamten Zeiteinheit, in welcher Anweisungen ausgeführt werden als präsent oder abwesend. Außerdem ist der Status eines Signals global bekannt. Das Vorhandensein von Signalen kann mit der Methode present(x) geprüft werden. present(a) then Statement1 else Statement2 Beispielcode 2: Present 1 Im obigen Beispiel würde, wenn das Signal a während der Durchführung dieser Anweisungen präsent ist, das aufgeführte Statement1 durchgeführt werden, ansonsten Statement2. present(b) then Statement3 Beispielcode 3: Present 2 In diesem Beispiel wird bei Vorhandensein von Signal b Statement3 ausgeführt, ansonsten geschieht nichts. present(c) else Statement4 Beispielcode 4: Present 3 Im Falle dieser Anweisung wird bei Abwesenheit von Signal c das Statement4 ausgeführt, ansonsten geschieht nichts. 4.3 Kontrollstrukturen Esterel bietet neben üblichen Kontrollstrukturen wie if spezifische Strukturen, um Signale zu behandeln. if Expression then Statement1 else Statement2 Beispielcode 5: Bedingte Verzweigung Dieses Beispiel zeigt eine übliche bedingte Verzweigung, die bei Zutreffen von Expression Statement1 ausführt und ansonsten Statement2. Es gibt neben dem oben erwähnten present zusätzlich watching. Im folgenden Beispiel wird Statement1 solange wiederholt, bis Signal präsent ist. do Statement1 watching Signal Beispielcode 6: Watching 1 Esterel Gregor Barth, Philipp Schröter Seite 7

8 Eine weitere Möglichkeit, den Programmfluss zu kontrollieren, bietet Esterel durch Schleifen. loop Statement end Beispielcode 7: Schleife Ohne weitere Angaben ist dies eine Endlosschleife. Eine solche Schleife lässt sich durch traps verlassen (siehe weiter unten). 4.4 Ausnahmebehandlung Esterel enthält auch die Behandlung von Ausnahmen, dafür verwendet Esterel die Anweisung trap. Trap umschließt ein Statement und wird verlassen, wenn ein exit mit der entsprechenden Marke aufgerufen wird. trap T in Statement if Expression then exit T end Beispielcode 8: Trap In diesem Beispiel wird Statement wiederholt ausgeführt bis Expression wahr ist und mit exit T dieser Teil verlassen wird. 4.5 Statements Die Syntax von Esterel enthält eine Reihe von Anweisungen zur Steuerung und Nutzung von Signalen. Signale werden durch die Anweisung emit übertragen und können mit und ohne Werte übertragen werden. Auch gilt es zu beachten, dass das Übertragen von Signalen sofort geschieht, also ohne Zeitverlust angenommen wird. Der Initialwert von Signalen ist. present(a) then emit b ; present(c) then emit d:5 Beispielcode 9: Emit In diesem Beispiel wird beim Erfassen des Signals a das Signal b ohne Wert und wenn c präsent ist, d mit dem Wert 5 gesendet. Durch das Semikolon wird die gleichzeitige Abarbeitung dieser beiden Operationen in einer Sequenz ausgedrückt. Auch wenn beide in derselben Zeiteinheit stattfinden, gibt es eine definierte Reihenfolge, von links beginnend nach rechts. Esterel erlaubt ebenso die parallele Ausführung von Programmen mit Hilfe des Operators. [2] Statement1 Statement2 Beispielcode 10: Parallelanweisung Sind Statement1 und Statement2 jeweils Esterel-Programme, so ist Statement1 Statement2 ihre parallele Ausführung. Startet Statement1 Statement2 zum Zeitpunkt t, so starten Statement1 und Statement2 ebenfalls zum Zeitpunkt t. Terminiert Statement1 zum Zeitpunkt t + δ 1 und Statement2 zum Zeitpunkt t+δ 2, so terminiert Statement1 Statement2 zum Zeitpunkt t + max(δ 1, δ 2 ). Eingabedaten erreichen beide Programme. Daten werden jedoch nicht zwischen den Programmen ausgetauscht. Beide Programme können das gleiche Ausgabesignal senden, was jedoch nicht immer problemlos einsetzbar ist. [3] Durch den Operator können also parallele Kontrollfäden erzeugt und synchronisiert werden. Seite 8 Esterel Gregor Barth, Philipp Schröter

9 Gemäß der Definition von Esterel werden diese beiden Anweisungen echt gleichzeitig durchgeführt und es vergeht keine Zeit zwischen der Ausführung dieser beiden Anweisungen. Esterel bietet einige primitive Datentypen und lässt auch die Generierung neuer Datentypen zu, jedoch sind die weiteren Verwendungsmöglichkeiten stark eingeschränkt, da die Hostsprache für die Datenverwaltung zuständig ist. In Basic Esterel gibt es die Datentypen boolean für Wahrheitswerte und integer für Ganzzahlen. Plain Esterel bietet darüber hinaus noch float für Fließkommazahlen und string für Zeichenketten. Diese Datentypen können Variablen auf die folgende Weise zugewiesen werden. var x : integer in Statement1 end var Beispielcode 11: Variablen Mit dieser Schreibweise wird auch gleichzeitig die Sichtbarkeit der Variablen festgelegt. Auf eine ähnliche Art werden auch Signale deklariert. signal S in Statement1 end signal S (combine Type with comb) in Statement1 end Beispielcode 12: Signale Eine Zuweisung von Werten an Variablen findet in Esterel durch das aus der Mathematik bekannte Definitionszeichen := statt. Zusätzlich gibt es noch den Befehl nothing, der nichts tut, und halt, der das Ende der Programmausführung zur Folge hat. Kommentare können mit Prozentzeichen eingefügt werden. 4.6 Interface Deklarationen Esterel interagiert, wie später in Kapitel 7 beschrieben, immer mit einer Hostsprache. Die Schnittstelle bilden Signale. Basic Esterel stellt zwei Signaltypen zur Verfügung: Input- und Output- Signale. Der Wert eines Signals kann jederzeit mit dem?-operator durch?signal erfragt werden. Input-Signale stammen aus der Umgebung von Esterel und können nicht intern erzeugt werden. Sie werden immer mit einem Typ type deklariert: Input S (type); Beispielcode 13: Input Output-Signale werden durch ein emit Statement gesendet. Esterel erlaubt es, dass das gleiche Signal in mehreren Instanzen gleichzeitig, aber mit unterschiedlichem Wert ausgesendet wird. emit S(1) emit S(2) Beispielcode 14: Output 1 Esterel Gregor Barth, Philipp Schröter Seite 9

10 Da ein Output-Signal immer nur einen Wert haben kann, führt dies möglicherweise zu Kollisionen. Ein Output-Signal kann nur ein Mal pro Moment gesendet werden und braucht daher einen diskreten Wert. Darum muss ein Output-Signal immer mit einer Funktion comb angegeben werden, die zwei Ausgabewerte kombiniert. output O (combine t with comb) Beispielcode 15: Output 2 Die Kombinationsfunktion comb soll sicherstellen, dass keine Kollisionen auftreten und der Wert des Signals wird mittels der Formel comb(v 1, comb(v 2,... comb(v n-2, comb( vn-1, v n ))...)) bestimmt. Diese Funktion besitzt die folgende Signatur. function comb( t, t ) : t Beispielcode 16: function comb 4.7 Relationen Zusätzlich zur Definition der einzelnen Signale können auch die Relationen der Signale zueinander definiert werden. Es gibt zwei Relationsarten: 1.1 Inkompatibilitätsrelationen der Form S1 # S2 # S3 drücken aus, dass es drei Signale S1, S2, S3 gibt, aber immer nur eines gleichzeitig auftreten kann. 2.1 Synchrone Relationen geben an, dass ein Signal präsent ist, wenn ein anderes es auch ist. Ausgedrückt wird dies durch: S1 S2. relation LEFT-BUTTON # RIGHT-BUTTON, SECOND => HUNDREDTH-OF-SECOND; Beispielcode 17: Relation 5. Plain Esterel Plain Esterel ist eine Erweiterung von Basic Esterel und bietet drei Arten von neuen Funktionalitäten. Die Schnittstellentypen input, output und sensor erweitern das Signalinterface. Funktionen wie await vereinfachen teilweise die Programmierung mit Esterel oder erhöhen die Nutzerfreundlichkeit. Die Direktive copymodule erlaubt begrenzte Modularität. 5.1 Signalinterfaceerweiterung Plain Esterel erweitert Basic Esterel um zwei weitere Signaltypen. Die strenge Trennung zwischen Input-Signalen und Output-Signalen wird gelockert, da es vorkommen kann, dass ein Signal sowohl als Input als auch als Output dient. Die Definition lautet: inputoutput BUS_REQUEST Beispielcode 18: inputoutput Die zweite Neuerung stellen Sensoren dar. Sie repräsentieren passive externe Geräte, welche keine eigenen Signale in festen Zeitintervallen aussenden, sondern als konstant präsent angenommen werden. Ein Entfernungsmesser oder ein Thermometer sind Beispiele für solche Sensoren. Sensoren Seite 10 Esterel Gregor Barth, Philipp Schröter

11 sind gegenüber Input-Signalen stark eingeschränkt und können üblicherweise nur durch den?- Operator ausgelesen werden. sensor DISTANCE (METER) Beispielcode 19: Sensor Zusätzlich erlaubt Plain Esterel die Typendefinition bei Input-Signalen wegzulassen, falls der aus Kompatibilitätsgründen eingeführte Typ triv verwendet wird. Ebenso ist es erlaubt, die Kombinationsfunktion comb bei Output-Signalen wegzulassen, falls ausgeschlossen werden kann, dass Kollisionen auftreten. 5.2 Await In Basic Esterel kann man mit do halt watching Signal Beispielcode 20: Watching 2 ein Programmteil warten lassen, bis ein erwartetes Signal eintrifft. In Plain Esterel wird dies vereinfacht durch das await-statement: await Signal do statement Beispielcode 21: Await 2 Zusätzlich erlaubt await das Warten auf mehrere unterschiedliche Signale gleichzeitig. await case SECOND do stat, case 2 METER do stat, case immediate ALARM do stat, end Beispielcode 22: Await 3 Die einzelnen Bedingungen werden von oben nach unten geprüft. Somit wird beim gleichzeitigen Eintreffen mehrerer Signale nur das oberste in der Liste bearbeitet. Esterel Gregor Barth, Philipp Schröter Seite 11

12 5.3 Immediate watchdog Basic Esterel erlaubt watchdog Statements, allerdings unterliegen diese einer Beschränkung. Es können nur Signale zum Verlassen des Konstrukts führen, welche gesendet wurden, während man sich im aktuellen Konstrukt befand. Um jedoch auch Signale abzufangen, welche vor Betreten des Konstrukts bereits emittiert werden, kann der immediate watchdog genutzt werden. Dieser ersetzt ein erweitertes watchdog Statement present S else do statement watching S end Beispielcode 23: Present 4 durch folgenden semantisch äquivalenten Code: Do statement watching immediate S Beispielcode 24: Watching immediate 5.4 Schleifen Plain Esterel führt mehrere Erweiterungen von Schleifen ein, welche hier kurz vorgestellt werden. Eine kopfgesteuerte Schleife ist eine Vereinfachung der Kombination einer Schleife und einer trap. Innerhalb der trap prüft eine if-abfrage den Zähler der Schleife welche gegebenenfalls über ein exit Statement verlassen wird. Wie im Codebeispiel zu sehen, erhält man nun eine vorprüfende Schleife die ein Statement exp Mal ausführt. Repeat exp times statement end Beispielcode 25: Repeat Sehr häufig müssen in synchronen Programmen Aktionen in zeitlich genau abgestimmten Abständen ausgeführt werden. Um dies zu vereinfachen, wurden in Plain Esterel temporäre Schleifen eingeführt. Es gibt zwei Formen um Statements in festen Abständen auszuführen: Every S do stat end Beispielcode 26: Every Nach jedem eingehenden Signal wird das Statement stat erneut gestartet. Ein sinnvolles Beispiel für ein Signal wäre 1000 MILLISECOND. Loop stat each S Beispielcode 27: Loop Die zweite Form ähnelt der ersten, startet den Rumpf allerdings sofort und nachfolgend bei jedem eintreffenden Signal. Seite 12 Esterel Gregor Barth, Philipp Schröter

13 5.5 Ausnahmebehandlung Einfache Abbruchbedingungen konnten in Basic Esterel bereits mit einem trap Statement realisiert werden. Die Erweiterung erlaubt es Handler für spezifische exit Events einzusetzen und Werte zu übergeben. Im Beispiel sei stat der eigentliche Rumpf der Funktion. Stat1 und stat2 seien Exception Handler. Im Rumpf selbst können exit Aufrufe verwendet werden, welche sich auf die definierten Bedingungen ALARM, ZERO_DIVIDE oder TERMINATE beziehen, zum Beispiel exit ZERO_DIVIDE. Wird eines dieser Statements ausgeführt, wird der Rumpf, zum Beispiel stat1 oder stat2, sofort verlassen und der entsprechende Handler ausgeführt, falls vorhanden. Ein Handler ist ein normales Statement im vollen Umfang. Im unten stehenden Beispiel ist TERMINATE zwar eine exit Bedingung, besitzt aber keinen eigenen Handler; das Statement wird also bei exit TERMINATE einfach verlassen. Handlern können überdies Variablen übergeben werden. ALARM(exp) stellt dies dar. Trap ALARM (combine integer with +), ZERO_DIVIDE, TERMINATE in stat handle ALARM do stat1 handle ZERO_DIVIDE do stat2 end Beispielcode 28: Trap ALARM 5.6 Timeout Unabhängig von sonstigen Abbruchbedingungen ist es manchmal erforderlich, Schleifen nach einer festgelegten Zeitspanne zu verlassen. Je nach Abbruchbedingung kann es wichtig sein, weitere Statements auszuführen. Um dies zu vereinfachen, wurden Timeouts eingeführt. do statement watching S timeout statement end Beispielcode 29: Timeout In Basic Esterel ist folgender Code notwendig, um das Timeout Statement zu erzeugen: trap TERMINATE in do statement,1 ; exit TERMINATE watching S; statement2, end Beispielcode 30: Trap Terminate Esterel Gregor Barth, Philipp Schröter Seite 13

14 5.7 Copymodule Durch copymodule ist es möglich, bereits implementierte Module aufzurufen, ähnlich einem Funktionsaufruf in anderen Sprachen. Dies ermöglicht eine begrenzte Modularität. Mittels des Befehls copymodule M Beispielcode 31: Copymodule wird der Code des Moduls M an die Stelle des obigen Aufrufes gesetzt und dort auch ausgeführt. Das Kopieren von Modulen kann verschachtelt erfolgen. Zu beachten ist hierbei, dass das copymodule den Aufruf direkt durch den aufzurufenden Code ersetzt. 6. Hostsprache Wie schon erwähnt, benötigt Esterel zur korrekten Ausführung eine Hostsprache als Grundlage, da Esterel keine vollständige Programmiersprache darstellt. Stattdessen werden komplexere Operationen von der Hostsprache übernommen. Esterels Aufgabe besteht vor allem in der Synchronisation von Ereignissen. Esterel interagiert mit der Hostsprache, indem die in Esterel geschriebenen Programmteile in kompatible Äquivalente der Hostsprache übersetzt und dann eingebunden werden. Darüber hinaus gibt es auch innerhalb von Esterel Modulen Schnittstellen, um in Interaktion mit der Hostsprache zu treten. Werte können über Konstanten sowohl zwischen mehreren Modulen, als auch zwischen Esterel und der Hostsprache ausgetauscht werden. Dabei ist dem Esterel Modul der Wert bekannt, zugewiesen wird er jedoch in der Hostsprache. Andere Datentypen können in Esterel definiert werden und diese Typen sind bekannt, aber vor ihrer Verwendung muss der Typ mit dem Schlüsselwort type deklariert werden. Bei derart neu definierten Datentypen ist es Esterel allerdings nicht möglich, diese Variablen zu bearbeiten. type DOUBLE, TIME; constant PI : DOUBLE, MORNING : TIME Beispielcode 32: Type Um Operationen außerhalb von Esterel durchzuführen, gibt es functions, welche in Esterel deklariert, aber in der Hostsprache implementiert werden. Dabei wird impliziert, dass die Funktionen keine Seiteneffekte haben. function EQUAL_TIME (TIME, TIME) : boolean Beispielcode 33: Function Da die Implementierung nicht in Esterel durchgeführt wird, muss lediglich die Signatur angegeben werden. Eine weitere Schnittstelle sind Prozeduren, wobei die Syntax ähnlich ist, die Funktionsweise jedoch unterschiedlich. procedure INC_TIME (TIME) (integer); Beispielcode 34: Procedure Seite 14 Esterel Gregor Barth, Philipp Schröter

15 Der offensichtlichste Unterschied sind die zweiten Mengen an Parametern, die angegeben sind. Bei der ersten Menge werden die Parameter als Referenz übergeben (call by reference), während sie in der zweiten Menge als Werte übergeben werden (call by value). Vorsicht ist bei der Übergabe als Referenz geboten, da hierbei Seiteneffekte auftreten können. 7. Semantik Im Kontext von Esterel gibt es drei Semantiken. Eine intuitive Semantik, die sich mit der Verarbeitung von Eingabeereignissen unter besonderer Betrachtung des zeitlichen Ablaufs beschäftigt. Eine formale Verhaltenssemantik, welche eine mathematische Definition der Antworten auf Eingaben festlegt. Und zusätzlich eine Ausführungssemantik, die die Korrektheit der Reaktionen garantieren soll. 7.1 Intuitive Semantik Mit der intuitiven Semantik wird das Verhalten eines Moduls beim Auftreten eines sogenannten Eingabeereignisses (input event) beschrieben. Ein Eingabeereignis besteht aus einem oder mehreren, möglicherweise gleichzeitig stattfindenden Vorkommnissen aus der Umwelt. Eine Reihe von Eingabeereignissen wird als Eingabehistorie (input history) bezeichnet. Auf derartige Ereignisse reagiert ein Modul, indem es lokale Variablen aktualisiert und Signale nach außen aussendet, welche dann als das Ausgabeereignis (output event) bezeichnet werden und zusammen mit allen anderen Operationen als Reaktion (reaction) zusammengefasst werden. Die Reaktion erfolgt unter der Annahme, sie wäre ohne Zeitverlust, was bedeutet, dass die Ausgabe zeitgleich mit der Eingabe erfolgt. Darüber hinaus bestimmt die Eingabehistorie, wann eine Reaktion stattfindet, da nur eine Reaktion erfolgt, wenn es ein Eingabeereignis gibt, ansonsten ist die ausführende Maschine inaktiv. Wie weiter oben erwähnt, besitzt jedes Signal zu jedem Zeitpunkt einen definierten Zustand. Das leitet sich aus dem sogenannten Sharing Law 2 ab, welches für alle Signale gilt, die Teil einer Reaktion sind. Neben der Maßgabe, dass alle Signale zu jedem Zeitpunkt einen definierten Zustand haben, gilt zusätzlich, dass jedes Signal ebenfalls einen Wert hat. Dies ist entweder der aktuelle Eingabewert, wenn das Signal gerade präsent ist, der Wert, den das Signal das letzte Mal hatte als es präsent war, falls es gerade nicht präsent ist, oder, falls das Signal in der aktuellen Reaktion bisher nicht präsent war. Bei Ausgabesignalen ist der aktuelle Wert das Ergebnis aller gesendeten Werte dieses Signals. Neben der Beschreibung von Reaktionen ist der Hauptbestandteil der intuitiven Semantik die Zeiteinteilung, welche in Momente unterteilt ist. Obwohl alle Ereignisse als sofort und einige als gleichzeitig stattfindend gelten, gibt es dennoch zeitliche Unterschiede zwischen verschiedenen Ereignissen. Die Werte von Signalen und die Interaktion von Teilprozessen hängen von der zeitlichen Koordinierung ab. Deswegen gibt es vier Annahmen diesbezüglich: Erstens bestimmt der Kontext innerhalb des Programms, wann die Ausführung eines Ausdrucks beginnt. Zweitens wird durch die innere Struktur einer Anweisung festgelegt, wann und ob diese beendet wird. Wenn eine Anweisung im gleichen Moment beendet wird, in der sie beginnt, wird dies als sofortige Beendigung (terminates instantly) bezeichnet. 2 [4], Seite 101 Esterel Gregor Barth, Philipp Schröter Seite 15

16 Drittens wird ein Verlassen durch eine trap nicht als Beendigung der Ausführung im Sinne des zweiten Punkts behandelt, wobei die Anweisung aber inaktiv ist. Außerdem wird eine Anweisung, die nicht im selben Moment des Starts endet oder durch eine trap unterbrochen wird, als sich Zeit nehmend (takes time) bezeichnet. Viertens und letztens kann eine Anweisung durch einen anderen Teil des Programms während eines Moments beendet oder unterbrochen werden. Ab diesem Zeitpunkt wird es davon abgehalten, weitere Aktionen durchzuführen, ebenso wie sich zu beenden. Neben diesen vier Annahmen gibt es eine Reihe von Festlegungen bezüglich Statements: Der Modulkörper startet beim Erhalten des ersten Eingabeereignisses und beendet sich nicht. Nothing führt keine Aktion durch und beendet sich augenblicklich. Zuweisungen erfolgen augenblicklich und beenden sich ebenso. Halt führt ebenfalls keine Aktionen durch, beendet sich aber nicht. Procedures aktualisieren den Speicher und beenden sich augenblicklich, daher ist es ratsam, keine langwierigen Berechnungen in Procedures auszulagern, stattdessen sollten solche Arbeiten an externe Entitäten übertragen, auf die Resultate gewartet und die Ergebnisse mittels Signalen kommuniziert werden. Emit Anweisungen überführen ihren Ausdruck in einen Wert, übertragen ihn und beenden sich dann. Bei einer Sequenz aus Anweisungen startet die erste Anweisung im selben Moment, in dem die Sequenz startet. Sobald die erste Anweisung beendet wird, startet die zweite und die Sequenz verhält sich so, als wäre sie die zweite Anweisung, außer wenn durch die erste Anweisung eine trap ausgelöst wird. Dann wird die gesamte Sequenz unterbrochen und keine weitere Anweisung mehr ausgeführt. Bei einer Schleife wird der Inhalt der Schleife ausgeführt, wenn die Schleife selber startet. Abgesehen vom Verlassen einer Schleife durch eine äußere trap wird eine Schleife nie beendet. Verzweigte Bedingungen werden augenblicklich geprüft, ihr Ergebnis bestimmt und die zutreffende Anweisung gestartet, wobei die Bedingung sich wie die gewählte Verzweigung verhält. Ein present verhält sich wie eine verzweigte Bedingung. Im Falle einer watching Anweisung wird solange Zeit gewährt, bis das entsprechende Signal festgestellt wird, dann wird die Ausführung sofort beendet und auch nicht weiter ausgeführt. Wenn während der Ausführung eine äußere trap verlassen wird, bevor das entsprechende Signal auftaucht, wird das watching nicht weiter ausgeführt. Zwei parallele Anweisungen werden zeitgleich gestartet und verlassen beide ihre Zweige, wenn mindestens ein Zweig eine trap auslöst. Wenn mehr als eine trap ausgelöst wird, wird die äußerste verlassen. In beiden Fällen sind die Zweige danach inaktiv. Für traps selbst gilt, dass sie ausgeführt werden, bis sie ausgelöst werden oder eine äußere trap verlassen wird, in welchem Falle sämtliche inneren traps ebenfalls verlassen werden. Eine exit Anweisung beendet den mit einer Marke angegebenen Bereich, terminiert jedoch nicht. Deklarationen für lokale Variablen und Signale definieren diese mit dem Initialwert und verhalten sich danach wie der Rumpf. Seite 16 Esterel Gregor Barth, Philipp Schröter

17 7.2 Formale Verhaltenssemantik In Esterel wird ein Ereignis E als eine Menge aus Signalen S 1 S n, die gleichzeitig versendet werden, samt ihren Werten bezeichnet. E = S 1 (v 1 ) * S 2 (v 2 ) * * S n (v n ), n 0 Es gibt auch das leere Ereignis, welches mit ausgedrückt wird und keine Signale enthält. Wenn ein Signal S in Ereignis E vorkommt, dann gilt S E. Falls S wertbehaftet ist zusätzlich auch E(S) = v und S(v) E, andernfalls gilt ausschließlich S E. Die formale Schreibweise der Kombinationsfunktion, welche gleichzeitiges Senden eines Signals mit mehr als einem Wert abhandelt, wird im Rahmen semantischer Regeln statt durch comb (x, y) durch x *s y ausgedrückt. Wenn E das Produkt aus zwei Ereignissen E 1 und E 2 ist, wird dies durch E = E 1 * E 2 ausgedrückt. Dabei gilt dann: S(v 1 ) E 1 S E 2 => S(v 1 ) E S(v 2 ) E 2 S E 1 => S(v 2 ) E S(v 1 ) E 1 S(v 2 ) E 2 => S(v 1 *s v 2 ) E S E 1 S E 2 S E. Außerdem gilt, dass ein beliebiges Ereignis E kombiniert mit dem leeren Ereignis gleich E ist, E * = E. Neben zusammengesetzten Ereignissen gibt es vollständige Ereignisse Ê, die nicht nur alle momentan gesendeten Signale plus eventuelle Werte, sondern auch abwesende Signale mit eventuellen Werten beinhalten. Präsente Signale und ihre Werte werden mit S + (v) angegeben und abwesende Signale mit S - (v). Eine Menge Signale wird als Sortierung S bezeichnet. Als Historie wird eine Folge von Ereignissen bezeichnet, welche möglicherweise auch unendlich ist. H = E 0, E 1,, E n, Wenn eine Historie endlich ist, wird sie auch mit H[n] bezeichnet und umfasst die Ereignisse H = E 0, E 1,, E n. Als vollständige Historie wird eine Folge von vollständigen Ereignissen bezeichnet, für diese muss aber gelten, dass die Zustände von Signalen während einer Reaktion unveränderlich sind. Daraus ergibt sich auch, dass der Wert eines in E 0 nicht vorkommenden Signals S - Ê 0 Ê 0 (S) = sein muss. Ansonsten gilt, dass für ein in der aktuellen Reaktion i nicht vorkommendes Signal der Wert genommen wird, den es in einer früheren Reaktion zugewiesen bekommen hat. S - (v) Ê i Ê i-1 (S) = v, 0 i n Esterel Gregor Barth, Philipp Schröter Seite 17

18 Im Folgenden ein Beispiel für eine mögliche Sortierung S = {S 1, S 2 } und Historie H: E 0 E 1 E 2 E 3 H S 1 (0) S 2 (1) S 1 (2) * S 2 (2) Die zu diesem Beispiel gehörende vollständige Historie wäre folgende: Ê 0 Ê 1 Ê 2 Ê 3 S 1 + (0) * S 2 - ( ) S 1 - (0) * S 2 - (1) S 1 - (0) * S 2 - (1) S 1 + (2) * S 2 + (2) Modulableitung Bei einer gegebenen Eingabehistorie I berechnet ein Programm P eine Ausgabehistorie O, wobei das n-te Ausgabeereignis O n von der Eingabesequenz I[n] abhängt, welche von den ersten n Ereignissen von I bestimmt werden. Dabei wird die Ausgabehistorie Schritt für Schritt aufgebaut. Diese Idee lässt sich wie folgt ausdrücken: P = P 0 > P 1 usw. Mit P werden dabei Esterel Programme bezeichnet, Î n sind vollständige Ereignisse der vollständigen Eingabehistorie Î. Ein Programm P n wird bei diesem Verfahren in ein Programm P n+1 überführt, welches als Ableitung von P n bezeichnet wird bezüglich Î n. Die Ableitung P n+1 bezeichnet dabei das Programm, welches die Ausgabehistorie beginnend mit dem Schritt n+1 aus der Eingabehistorie ab Schritt n+1 berechnet. Dabei ist der Rumpf des Programms anders. Zur Illustration ein Beispielprogramm: module P: input SECOND; output BEEP; await 2 SECOND do emit BEEP end; halt Beispielcode 35: Beispiel Modulableitung 1 Dieses Programm sendet beim zweiten Empfang des SECOND Signals das Signal BEEP aus. Nach der ersten Überführung hat sich ein Teil des Rumpfs wie folgt geändert. Await 1 SECOND do emit BEEP end; halt Beispielcode 36: Beispiel Modulableitung 2 Beim nächsten Empfang von SECOND wird BEEP gesendet, anschließend beendet sich das Programm und wird danach zu einem halt Statement. Seite 18 Esterel Gregor Barth, Philipp Schröter

19 7.2.2 Induktionsregeln Die verwendete Relationsoperation > ist Vereinfachung der üblichen Relation und hat die Form: <stat, p> > <stat', p'> p und p' sind Speicher, welche die freien Variablen von stat enthalten. Ê ist ein vollständiges Ereignis, welches die gesamte Signalumgebung darstellt, in welcher stat ausgeführt wird. Es enthält die Sortierung von Eingabe- und lokalen Signalen, die für stat sichtbar sind. b ist ein Wahrheitswert, der angibt, ob stat beendet ist oder nicht. Im ersten Fall hat b einen Wert von tt, im zweiten Fall ff. T ist eine Sortierung von trap Markierungen, die von stat betreten wurden. Hierbei gilt, wie vorher erläutert, dass immer wenn eine trap verlassen wird, alle inneren ebenfalls verlassen werden. Der Speicher kann auf folgende Weise verändert werden: Ein leerer Speicher Ø enthält keine Variablen. Wenn p ein Speicher ist, der eine Sortierung V aus Variablen enthält und wenn X eine Variable ist, dann ist p.(x = v) ein Speicher, der V {X} enthält. Wenn ein Speicher p eine Sortierung V enthält und wenn X ϵ V ist, dann bezeichnet p[x v] das Zuweisen des Wertes v an die Variable X. Formal sieht es folgendermaßen aus: o o p.(x = v')[x v] = p.(x = v) oder p(y = v')[x v] = p[x v].(y = v'), wenn X ungleich Y Je nachdem, ob X bereits im Speicher enthalten ist (erster Punkt) oder nicht (zweiter Punkt). Als nächstes folgen einige Beispiele für Ausdrücke. Weitere können in [4], ab Seite 118 nachgelesen werden. Ein nothing Ausdruck lässt den Speicher unverändert und terminiert. <nothing, p> > <nothing, p>. Ein halt Ausdruck reproduziert sich selbst und terminiert nicht. <halt, p, > <halt, p>. Eine Variable wird wie folgt verwendet: <X, p> > p(x). Ein exit verhält sich auf die folgende Weise <exit T, p> > <halt, p>. Dabei schreibt es sein Label in die Markierungen mit den trap Labeln, wobei es nicht terminiert. Esterel Gregor Barth, Philipp Schröter Seite 19

20 7.3 Ausführungssemantik Die Ausführungssemantik von Esterel behandelt die Korrektheit der Ausführung von Esterel- Programmen. Ein Esterel-Programm gilt dann bezüglich einer Eingabe als korrekt, wenn es nach der Abarbeitung dieser Eingabe anhält. Für die ausführende Maschine wird angenommen, dass es eine konventionelle sequentielle Maschine ist. Jede Reaktion, in diesem Kontext macrostep genannt, besteht aus einer Sequenz atomarer Aktionen (microsteps), endet mit einer Vorbereitung auf die nächste Reaktion (expansion step). Die Aktionen sind durch Regeln, die die operationelle Struktur bestimmen, deterministisch. Auch wenn nebenläufige Programme, die sich aus deterministischen Programmen zusammensetzen, selbst nichtdeterministisch sind. Die Reaktionen von korrekten Programmen hingegen sind deterministisch Signale und Signalspeicher Für Signale gilt, dass sie als gemeinsam genutzte Variablen implementiert sind, welche auch bezüglich Lese- und Schreiboperationen so konzipiert sind, dass sie zu jedem Zeitpunkt einen wohldefinierten Zustand und Wert haben. Der Speicher, in dem die Informationen für die Signale aufbewahrt werden, unterscheidet sich von einem üblichen Speicher für Variablen nur dahingehend, dass es Informationen zum Zustand des Signals zusätzlich zu sonstigen gespeicherten Informationen gibt. Es gibt vier mögliche Ausprägungen von Speicherzellen: S = v: In die Speicherzelle S wurde in der aktuellen Reaktion noch nicht geschrieben und der Wert v entspricht dem aus der vorherigen Reaktion. S = v: In die Speicherzelle S wurde bereits während der aktuellen Reaktion geschrieben und ihr Wert ist gleich v. Momentan kann der Wert nicht gelesen werden, da es weitere Schreibvorgänge geben kann. S + = v: In die Speicherzelle S wurde während der aktuellen Reaktion geschrieben und es gibt keine weiteren Schreibvorgänge, daher kann der momentane Wert v durch?s gelesen werden. S ist präsent in dieser Reaktion. S - = v: In die Speicherzelle S wurde in der aktuellen Reaktion noch nicht geschrieben und es können auch keine weiteren Schreibvorgänge durchgeführt werden. Der Wert v kann mittels?s gelesen werden. S ist abwesend in der Reaktion. Die Speicherzellen für Signale Θ leiten sich vom leeren Signalspeicher Ø ab. Wenn Θ ein Speicher ist, dann ist Θ.(S x = v) ebenfalls ein Speicher, wobei gilt x ϵ {,, +, -}. Eine Leseoperation θ (S x = v)(s) = v kann nur unter der Bedingung durchgeführt werden, dass gilt x ϵ {+, -}. Die Notation für das Schreiben in eine Speicherzelle wird durch Θ.(S v) ausgedrückt. Eine Schreiboperation kann nur dann erfolgen, wenn noch nicht in den Speicher geschrieben wurde oder der neue Wert den alten ersetzt. Ersteres stellt sich wie folgt dar: Θ.(S )[S v'] = Θ.(S = v') letzteres so: Θ.(S )[S v'] = Θ.(S = v *s v'). In den verbleibenden beiden Fällen, also S + und S -, sind keine Schreiboperationen möglich. Seite 20 Esterel Gregor Barth, Philipp Schröter

21 Um die Ausführungssemantik mit der Verhaltenssemantik zu verbinden, werden Signalspeicher mit vollständigen Eingabe- und Ausgabeereignissen verbunden. Deswegen werden Aktionsregeln aufgestellt, welche sich an den Induktionsregeln der Verhaltenssemantik orientieren, aber den Speicher als weitere Komponente beinhalten. Davon werden einige als Beispiel hier präsentiert. Eine vollständige Ausführung für den gesamten Befehlssatz findet sich in [4], ab Seite 130. Das Senden eines Signals kann durchgeführt werden, wenn der Ausdruck exp zu einem Ergebnis führt, dann wird der Signalspeicher aktualisiert, wie weiter oben dargestellt. Das Überprüfen, ob ein Signal präsent ist, kann dann durchgeführt werden, wenn der Status des Signals + oder ist. Dann wird der entsprechende Zweig gewählt. Es gilt zu beachten, dass diese Überprüfung nicht auf Ausgabesignale angewandt werden kann, da diese niemals den Status + oder haben können. Eine Schleife agiert, wenn ihr Rumpf agieren kann, wobei der Rumpf einmal ausgeführt wird und dann die Schleife ein weiteres Mal angefügt wird. 8. Beispielanwendung Die Entwickler der Sprache Esterel haben mehrere Programmierbeispiele zur Demonstration der Fähigkeiten der Sprache zur Verfügung gestellt. Eines der populärsten ist eine digitale Armbanduhr [5]. Das ursprüngliche Beispiel ist sehr umfassend und enthält fast alle Funktionen einer modernen digitalen Armbanduhr, inklusive vier User-Buttons, eines Weckers, einstellbaren Zeitformaten, etc. Der Übersicht halber beschränken wir uns hier auf die Darstellung eines einzelnen Moduls, anhand dessen einzelne Aspekte von Esterel demonstriert werden sollen. Das Modul WATCH zeigt die Zeit in Stunden, Minuten und Sekunden an und verfügt über zwei Buttons, um die Zeit einzustellen. Hauptelement ist die Variable TIME, welche mit dem Wert INITIAL_TIME initialisiert wird. Die aktuelle Uhrzeit wird über ein Ausgabesignal TIME ausgegeben (siehe Zeile 20). Das gleichzeitige Verarbeiten mehrerer der drei Inputsignale wird durch die exklusive Relation in Zeile 24 unterbunden. Bevor die Hauptschleife betreten wird, emittiert das Modul als erstes die aktuelle Zeit. In der Hauptschleife werden die drei möglichen Inputsignale abgefangen und bearbeitet. Wird ein SECOND Signal registriert wird die Inkrementfunktion, welche in C implementiert ist, aufgerufen. Diese Esterel Gregor Barth, Philipp Schröter Seite 21

22 Funktion erhält die Zeit als Variable und das Signal ONE_SECOND als Wert. In der Funktion wird dann der neue Zeitwert berechnet module WATCH: type TIME; constant INITIAL_TIME : TIME; constant ONE_SECOND, ONE_MINUTE, ONE_HOUR : TIME; % The INCREMENT procedure is used for time arithmetics % The RESET_SECONDS procedure sets seconds to zero. procedure INCREMENT (TIME) (TIME), RESET_SECONDS (TIME) (); % SECOND is the watch internal quartz % SET_HOUR is the hour update button % SET_MINUTE is the minute update button input SECOND, SET_HOUR, SET_MINUTE; % Broadcasts the updated time value. output TIME: TIME; % All external events are supposed to be exclusive relation SECOND # SET_HOUR # SET_MINUTE; % We keep the current time value in the TIME variable var TIME := INITIAL_TIME : TIME in % Emission of the initial time value emit TIME (TIME); loop await case SECOND do call INCREMENT (TIME) (ONE_SECOND) case SET_MINUTE do call RESET_SECONDS (TIME) (); call INCREMENT (TIME) (ONE_MINUTE) case SET_HOUR do call INCREMENT (TIME) (ONE_HOUR) end await; % Emission of the updated value of TIME emit TIME (TIME) end loop end var end module Figure 1: Beispiel Armbanduhr Seite 22 Esterel Gregor Barth, Philipp Schröter

23 9. Compiler Die Entwickler von Esterel bieten die aktuelle Version des Esterel Compilers als Quellcode zum Download auf ihrer Webseite an, welcher selbst kompiliert wird. Sowohl für Linux als auch für Windows und Solaris von Sun. Darüber hinaus bietet die Columbia University einen eigenen Esterel Compiler an, den Columbia Esterel Compiler (CEC). Im Rahmen dieser Arbeit wurden die Linux und die Windows Version jeweils vom offiziellen Compiler als auch vom CEC getestet. Keine von beiden Versionen des offiziellen Esterel Compilers lief ohne Anpassung, wobei die Probleme nicht nur einfache Dinge wie Ordnernamen, die gesetzt werden mussten, waren, sondern auch falsche bzw. in den Betriebssystemen unbekannte Befehle. Speziell unter Linux gab es das Problem, dass vorausgesetzte Komponenten kein Teil der Auslieferung waren und wo es vorher keinen Hinweis auf die Notwendigkeit gab. Es gibt eine GUI-gesteuerte Installation, welche aber auch nicht ohne Probleme funktionierte. Die Installation unter Windows setzt eine vorhandene Version von Cygwin voraus. Der Esterel Compiler der Columbia University wird ebenfalls als Quellcode zum selbst kompilieren angeboten. Darüber hinaus gibt es für Windows einen Installer, welcher relativ problemlos funktionierte. Für Debian basierte Betriebssysteme gibt es seit 2008 eine Anfrage, ein Paket für CEC in die Ubuntu Paketquellen aufzunehmen. 3 Zusammenfassend lässt sich sagen, dass die Benutzerfreundlichkeit für nichtkommerzielle Endanwender arg verbesserungswürdig ist. Auch die Dokumentationen und Hilfestellungen sind sehr rar gesät. 10. Fazit Esterel ist eine durchdachte und vom theoretischen Standpunkt her gut definierte Sprache. Viele angepriesene Vorteile, wie die Gleichzeitigkeit bestimmter Operationen, werden dadurch erreicht, indem Annahmen bezüglich des zeitlichen Ablaufs getroffen werden und der Fokus von Esterel dahingehend gelegt wird. Esterel scheint hauptsächlich im industriellen Bereich Anwendung zu finden, wo die Synchronität und ihre Kontrolle bzw. Vorhersagbarkeit der Anwendungen eine große Rolle spielen, z. B. bei der Kontrolle von Robotern oder in der Luftfahrt. Insbesondere im privaten Bereich erweckt Esterel den Anschein, kaum verbreitet zu sein. Obwohl man Anleitungen für das Einrichten von PCs und Projekte wie den CEC findet, ist keine hohe Verbreitung im universitären Bereich zu vermuten. 3 Esterel Gregor Barth, Philipp Schröter Seite 23

24 Literaturverzeichnis [1] D. Harel und A. Pnueli, On the development of reactive systems: logic and models of concurrent systems, in Proceedings NATO Advanced Study Institute on Logistics and Models for Verfification and Specification of Concurrent Systems, NATO ASI Series F13, New York, Springer, 1985, pp [2] J. Ruf, Systembeschreibungssprachen, [3] P. Raymond, Esterel coding introduction, Verimag-CNRS, [4] G. Berry und G. Gonthier, The Esterel synchronous programming language: desgin, semantics, implementation, Science of Computer Programming 19, Number 2, pp , November [5] G. Berry, Rapport de recherche n 8, Centre de Mathématiques Appliquées, Ecole des Mines de Paris, [6] Esterel History, [Online]. Available: [Zugriff am 1 Mai 2013]. Seite 24 Esterel Gregor Barth, Philipp Schröter

25 Codebeispiele Beispielcode 1: Module... 6 Beispielcode 2: Present Beispielcode 3: Present Beispielcode 4: Present Beispielcode 5: Bedingte Verzweigung... 7 Beispielcode 6: Watching Beispielcode 7: Schleife... 8 Beispielcode 8: Trap... 8 Beispielcode 9: Emit... 8 Beispielcode 10: Parallelanweisung... 8 Beispielcode 11: Variablen... 9 Beispielcode 12: Signale... 9 Beispielcode 13: Input... 9 Beispielcode 14: Output Beispielcode 15: Output Beispielcode 16: function comb Beispielcode 17: Relation Beispielcode 18: inputoutput Beispielcode 19: Sensor Beispielcode 20: Watching Beispielcode 21: Await Beispielcode 22: Await Beispielcode 23: Present Beispielcode 24: Watching immediate Beispielcode 25: Repeat Beispielcode 26: Every Beispielcode 27: Loop Beispielcode 28: Trap ALARM Beispielcode 29: Timeout Beispielcode 30: Trap Terminate Beispielcode 31: Copymodule Beispielcode 32: Type Beispielcode 33: Function Beispielcode 34: Procedure Beispielcode 35: Beispiel Modulableitung Beispielcode 36: Beispiel Modulableitung Esterel Gregor Barth, Philipp Schröter Seite 25

Modellierung von Echtzeitsystemen

Modellierung von Echtzeitsystemen Modellierung von n Reaktive Systeme Werkzeuge: SCADE, Esterel Studio 71 Klausurtermin Für Studenten, die einen Schein benötigen, wird am Ende der Vorlesung eine schriftliche Klausur angeboten. Stoff der

Mehr

Die Programmiersprache Esterel

Die Programmiersprache Esterel Freie Universität Berlin Seminar für Programmiersprachen Wintersemester 14/15 Die Programmiersprache Esterel Zell, Christopher zell.christopher@fu-berlin.de 21. November 2014 1 Einleitung Die folgende

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Einführung in die Programmierung mit VBA

Einführung in die Programmierung mit VBA Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49) Anweisungen Eine Anweisung ist eine in einer beliebigen Programmiersprache abgefaßte Arbeitsvorschrift für einen Computer. Jedes Programm besteht aus einer bestimmten Anzahl von Anweisungen. Wir unterscheiden

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss Arrays FTI 41 2005-09-09 Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss z.b. Dim Werte(x) As Single. Wobei

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Es können ganze Programmteile aufgenommen werden. Mithilfe von Funktionen kann man denselben

Mehr

1 Funktionale vs. Imperative Programmierung

1 Funktionale vs. Imperative Programmierung 1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

5. Übung - Kanalkodierung/Programmierung

5. Übung - Kanalkodierung/Programmierung 5. Übung - Kanalkodierung/Programmierung Informatik I für Verkehrsingenieure Aufgaben inkl. Beispiellösungen 1. Aufgabe: Kanalkodierung a Folgende Kodes stehen Ihnen zur Verfügung: Kode 1: 0000000 Kode

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

Mehr

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen Agenda für heute, 1. April, 2010 Imperatives vs. objektorientiertes Programmieren Lesen Sie den Begleittext Seite 79 85 Eines der drei wichtigsten Programmierparadigmen (Paradigma: Denkmuster) Imperative

Mehr

Einführung in die Informatik I (autip)

Einführung in die Informatik I (autip) Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Klausur Grundlagen der Programmierung

Klausur Grundlagen der Programmierung Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel

Mehr

Lösungsvorschlag Serie 2 Rekursion

Lösungsvorschlag Serie 2 Rekursion (/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma

Mehr

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen)

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen) Programmierkurs I 11.11.2002 Gliederung: 1. Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen) EBNF: Wiederholung Die EBNF (Erweiterte Backus-Naur-Form) wurde in der Vorlesung

Mehr

Kontrollstrukturen -- Schleifen und Wiederholungen

Kontrollstrukturen -- Schleifen und Wiederholungen Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Algorithmen & Programmierung. Ausdrücke & Operatoren (1) Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit anschaulichen Beispielen aus der Java-Welt apl. Prof. Dr. Achim Ebert Inhalt Kapitel 3: Kontrollstrukturen Einfache Anweisungen Anweisungsblöcke Steuerung

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Algorithmen implementieren. Implementieren von Algorithmen

Algorithmen implementieren. Implementieren von Algorithmen Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente

Mehr

CADSTAR MRP-Link. MRP-Link ist erstellt von:

CADSTAR MRP-Link. MRP-Link ist erstellt von: CADSTAR MRP-Link MRP-Link ist erstellt von: CSK CAD Systeme Kluwetasch Zip: 2161 Town: Altenholz Street: Struckbrook 9 Tel: +9-31-32917-0 Fax: +9-31-32917-26 Web: http://www.cskl.de E-Mail: Kluwetasch@cskl.de

Mehr

TI-Basic. Programme und Funktionen

TI-Basic. Programme und Funktionen Dieser Artikel behandelt die Programmiersprache für TI-Taschenrechner. Die Programmiersprache für den TI 99/4A Heimcomputer findet sich unter TI BASIC (TI 99/4A). ist der inoffizielle Name einer Programmiersprache,

Mehr

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave Fachhochschule Südwestfalen Wir geben Impulse Kontrollstrukturen und Schleifen in Octave Einführung Inhalt m-files Script-Files Function-Files Ein- Ausgabe von Variablen oder Ergebnissen For-Schleife While-Schleife

Mehr

Programmsteuerung mit PHP - if/else, elseif,switch

Programmsteuerung mit PHP - if/else, elseif,switch Programmsteuerung mit PHP - if/else, elseif,switch Bei der Programmierung geht es meist vor allem darum festzulegen, welche Aktionen wie oft unter welchen Bedingungen ausgeführt werden sollen. Hierzu steht

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir

Mehr

Funktionale Programmiersprachen

Funktionale Programmiersprachen Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Informationsverarbeitung im Bauwesen

Informationsverarbeitung im Bauwesen 12 im Bauwesen Markus Uhlmann 1 Zusammenfassung der 11. Vorlesung Objektorientierte Programmierung (OOP) Wozu eigentlich? Was unterscheidet OOP von traditionellen Techniken? Verwendung von vordefinierten

Mehr

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Dipl.-Ing. Klaus Knopper 21.12.2006 Hinweis: Bitte schreiben Sie auf das Deckblatt und auf jede Seite Ihren Namen und Ihre Matrikelnummer,

Mehr

DieÜbersetzung funktionaler Programmiersprachen

DieÜbersetzung funktionaler Programmiersprachen DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;

Mehr

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme Institut für Computational Science Prof. Dr. H. Hinterberger Praxismodul 1 Einführung in die Programmierung Erste Programme Einführung in die Programmierung 2 Institut für Computational Science, ETH Zürich,

Mehr

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten. 2. Grundlagen Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten. Laufzeitverhalten beschreiben durch O-Notation. 1 Beispiel Minimum-Suche Eingabe bei Minimum

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration Algorithmen & Programmierung Steuerstrukturen im Detail Selektion und Iteration Selektion Selektion Vollständige einfache Selektion Wir kennen schon eine Möglichkeit, Selektionen in C zu formulieren: if

Mehr

Algorithmen und ihre Programmierung

Algorithmen und ihre Programmierung Veranstaltung Pr.-Nr.: 101023 Algorithmen und ihre Programmierung Veronika Waue WS 07/08 Einführung Definition: Algorithmus Ein Algorithmus ist eine genau definierte Folge von Anweisungen zur Lösung eines

Mehr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen . Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Kontrollstrukturen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Kontrollstrukturen Wichtig: bedingte Ausführung

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf) Musterlösung Übung 2 Aufgabe 1: Große Zahlen Das Ergebnis ist nicht immer richtig. Die Maschine erzeugt bei Zahlen, die zu groß sind um sie darstellen zu können einen Über- bzw. einen Unterlauf. Beispiele

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales

Mehr

Modul 122 VBA Scribt.docx

Modul 122 VBA Scribt.docx Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A 2.4.6. Kontrollstrukturen if-anweisung: Bedingte Ausführung (Verzweigung) 2 Varianten: if (Bedingung) Anweisung (Anweisung = einzelne Anweisung oder Block) Bedeutung: die Anweisung wird nur ausgeführt,

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

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

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen Agenda für heute, 26. März, 2009 Imperatives vs. objektorientiertes Programmieren Lesen Sie den Begleittext Seite 79 85 Eines der drei wichtigsten Programmierparadigmen (Paradigma: Denkmuster) Imperative

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)

Mehr

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen Einführung in die Programmierung für NF Rückgabewerte, EBNF, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 Rückgabewerte, EBNF, Fallunterscheidung, Schleifen 2 Funk@on und Prozedur Methoden

Mehr

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

Funktionen nur wenn dann

Funktionen nur wenn dann Funktionen nur wenn dann Funktionen können auch nur in bestimmten Fällen angewendet werden. Code wird nur in einem bestimmten Fall ausgeführt Code Ja Code Block wahr if wahr? Nein else Code Block Alternative

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II in JAVA D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 31. März 2009, c 2009 D.Rösner

Mehr

Umsetzung einer Klassenkarte in einer Programmiersprache

Umsetzung einer Klassenkarte in einer Programmiersprache Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,

Mehr

Übersicht Shell-Scripten

Übersicht Shell-Scripten !!!! Wichtig: Bei Shell-Scripten enden die Zeilen nicht mit einem Strichpunkt!!!! Erste Zeile eines Shell-Scripts: #! /bin/bash Variablen in Shell-Scripts: Variablennamen müssen mit einem Buchstaben beginnen,

Mehr

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben Dieses Dokument soll mehr dazu dienen, Beispiele für die formal korrekt mathematische Bearbeitung von Aufgaben zu liefern, als konkrete Hinweise auf typische Klausuraufgaben zu liefern. Die hier gezeigten

Mehr

Prozeduren und Funktionen

Prozeduren und Funktionen OSZ Handel I - Gymnasiale Oberstufe (Abt. V) In Anlehnung an: Duden Informatik (3.Auflage, Dudenverlag, 2001, S. 477). Prozeduren und Funktionen Fach: Informatik Parameter sind Platzhalter in einer Prozedur

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Konzepte der Programmiersprachen

Konzepte der Programmiersprachen Konzepte der Programmiersprachen Sommersemester 2010 4. Übungsblatt Besprechung am 9. Juli 2010 http://www.iste.uni-stuttgart.de/ps/lehre/ss2010/v_konzepte/ Aufgabe 4.1: Klassen in C ++ Das folgende C

Mehr

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1 Algorithmen und Datenstrukturen 1. EINLEITUNG Algorithmen und Datenstrukturen - Ma5hias Thimm (thimm@uni-koblenz.de) 1 Allgemeines Einleitung Zu den Begriffen: Algorithmen und Datenstrukturen systematische

Mehr

6. Funktionen, Parameterübergabe

6. Funktionen, Parameterübergabe 6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Strings Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Beispiel: String zeile = "Cusanus-Gymnasium Wittlich";

Mehr

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

Tag 3 Repetitorium Informatik (Java)

Tag 3 Repetitorium Informatik (Java) Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Typkonvertierung

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Programmierparadigmen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Programmiersprachen-Paradigmen Eine Programmiersprache

Mehr

OCP Java SE 8. Lambda

OCP Java SE 8. Lambda OCP Java SE 8 Lambda Lambda-Ausdruck sieht ähnlich wie eine Deklaration einer Methode ohne Name und Ergebnistyp aus (a, b) -> b.compareto(a) Lambda Vor Java 8 Ausführbarer Programmcode ( Verhalten ) nur

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Sascha Böhme, Lars Noschinski Sommersemester 2011 Lösungsblatt 9 25. Juli 2011 Einführung in die Theoretische Informatik

Mehr