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

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Kapitel 9: Graphdurchlauf
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Anwendungen des OODM auf die ADB / NDB
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Agenda Sitzung 2 für den Programmaufbau
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Strukturierter Text.
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
10. Grundlagen imperativer Programmiersprachen
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Aufgabenbesprechung Programming Contest. Order 7 Bo Pat Jean Kevin Claude William Marybeth 6 Jim Ben Zoe Joey Frederick Annabelle 0 SET 1 Bo Jean Claude.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
-17 Konjunkturerwartung Europa September 2013 Indikator > +20 Indikator 0 a +20 Indikator 0 a -20 Indikator < -20 Europäische Union gesamt: +6 Indikator.
IMS Universität Stuttgart 1 Einführung in XML Hannah Kermes HS: Elektronische Wörterbücher Do,
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Differentieller Stromverstärker
Prof. Dr. Bernhard Wasmayr
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
Die Geschichte von Rudi
SK / , , in Hochkössen und der Wildschönau flow Ski- und Snowboardschule Intersport Menzel.
Eine Einführung in die CD-ROM
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts von IBM zu Beginn der 70er Jahre: Entwicklung der Sprache.
1 Ein kurzer Sprung in die tiefe Vergangenheit der Erde.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Equals, Hashcode und CompareTo Micha Kessler
Analyse von Ablaufdiagrammen
Deutsch III Unit 4 Part 5 Shopping. 1 to go shopping.
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Travelling Salesman Problem (TSP)
Symmetrische Blockchiffren DES – der Data Encryption Standard
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES KULTURELLER ZUSAMMENHALT UND AUSDEHNUNG DER IDEEN AUF EUROPÄISCHEM.
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Pigmentierte Läsionen der Haut
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
1 Mathematical Programming Nichtlineare Programmierung.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Data Mining Spectral Clustering Junli Zhu SS 2005.
Numbers Greetings and Good-byes All about Me Verbs and Pronouns
Kompetenztraining Jura Martin Zwickel / Eva Julia Lohse / Matthias Schmid ISBN: © 2014 Walter de Gruyter GmbH, Berlin/Boston Abbildungsübersicht.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
 Präsentation transkript:

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

2 ins kalte Wasser var A = [3, 10, 5, 7, 1] indices = {0, 1, 2, 3, 4} Main() step DO_SORT: until fixpoint choose i in indices, j in indices where i A(j) A(i) := A(j) A(j) := A(i) step OUTPUT: WriteLine(A) var A = [3, 10, 5, 7, 1] indices = {0, 1, 2, 3, 4} Main() step DO_SORT: until fixpoint choose i in indices, j in indices where i A(j) A(i) := A(j) A(j) := A(i) step OUTPUT: WriteLine(A)

3 ins kalte Wasser (2) class Person var age as Integer var Amy as Person(20) var Bob as Person(16) var Jim as Person(40) People = {Amy, Bob, Jim} GrowOlder() forall p in People p.age := p.age + 1 var year = 2006 class Person var age as Integer var Amy as Person(20) var Bob as Person(16) var Jim as Person(40) People = {Amy, Bob, Jim} GrowOlder() forall p in People p.age := p.age + 1 var year = 2006 Main() step while year < 2012 WriteLine(`In ` + year) WriteLine(Amy.age) WriteLine(Bob.age) WriteLine(Jim.age) GrowOlder() year := year + 1 Main() step while year < 2012 WriteLine(`In ` + year) WriteLine(Amy.age) WriteLine(Bob.age) WriteLine(Jim.age) GrowOlder() year := year + 1

4 ins kalte Wasser (3) reachable of T(root as T, arcs as Set of (T,T)) as Set of T var reachable = {root} step until fixpoint forall (l, r) in arcs if l in reachable and r notin reachable then add r to reachable step return reachable Main() arcs = {(1,2), (2,3), (4,5), (3,1), (5,6)} WriteLine(reachable(3,arcs)) reachable of T(root as T, arcs as Set of (T,T)) as Set of T var reachable = {root} step until fixpoint forall (l, r) in arcs if l in reachable and r notin reachable then add r to reachable step return reachable Main() arcs = {(1,2), (2,3), (4,5), (3,1), (5,6)} WriteLine(reachable(3,arcs))

5 Gliederung 1.Propaganda Offizielles von Microsoft 2.Einsatz Vorbereitungen In Aktion 3.Arbeitsweise Interessantes aus den Innereien 4.Referenz und Beispiele Symbole Variablen Schlüsselwörter

6 1. Propaganda Yuri Gurevich Wolfgang Grieskamp Wolfram Schulte Nikolai Tillman Margus Veanes

7 Ausführbare Spezifikationssprache basierend auf der Theorie der Abstract State Machines Aktuell Version 2 für Visual Studio.NET Nutzung von MS Word 2002 und XML-Technologie für Spezifikation Enge Zusammenarbeit mit anderen Visual Studio.NET Komponenten 1. Propaganda

8 2. Einsatz in Word XP Nutzung eines speziellen AsmL- Templates Spezielle Formatierungen für AsmL in Word anlegen... und benutzen

9

10 2. Einsatz in Word XP Kompilieren Fehler beseitigen (?) Ausgaben angucken...

11 2. Einsatz in der DOS-Box AsmL Datei kompilieren... dann ausführen

12 2. Einsatz im.NET Framework Integration in Visual Studio.NET Nutzen von Daten und Typen Aufrufen von Methoden etc. Nur leider nicht bei....

13 3. Arbeitsweise Zustände sind Belegungen von Variablen Zustandsübergänge sind Schritte, in denen sich Belegungen ändern Ein Lauf einer Maschine ist eine Folge von Zustandsübergängen

14 3. Arbeitsweise Parallelität So oft wie möglich zu verwenden Realisiert durch step Anweisung Reihenfolge der Anweisungen innerhalb eines Schrittes nicht deterministisch Updatemengen Vorrat an bei nächstem step zu aktualisierenden Variablen Konsistenz von Updates beachten

15 Gliederung 1.Propaganda Offizielles von Microsoft 2.Einsatz Vorbereitungen In Aktion 3.Arbeitsweise Interessantes aus den Innereien 4.Referenz und Beispiele Symbole Variablen Schlüsselwörter

AsmL - Referenz Wie sich das Große aus den Kleinen zusammensetzt

17 Die step Anweisung Markiert den nächsten Schritt Fasst alle Anweisungen eines Schrittes zusammen Main() initially F as File? = null initially FContents = ´´ step 1: F := Open(´MyFile.txt´) step 2: FContents := Read(F, 1) step 3: FContents := FContents + Read(F, 1) step 4: WriteLine(FContents) const myList = [1, 2, 3] Main() step foreach i in myList WriteLine(i)

18 Die step Anweisung (cont.) kennt Abbruchbedingungen für Anweisungsblöcke Main() initially x = 1 step until x > 9 x := x + 1 oder: Main() initially x = 1 step while x < 10 x := x + 1

19 Die step Anweisung (cont.) AsmL erkennt Fixpunkt-Operationen enum EnumMode Initial Started Finished Main() initially Mode = Initial initially Count = 0 step until fixpoint if Mode = Initial then Mode := Started Count := 1 if Mode = Started and Count 10 then Mode := Finished

20 Updates Variablen mit neuen Werten belegen Durch das := Symbol angezeigt Immer bei der nächsten step Anweisung Reihenfolge innerhalb eines Blocks nicht vorhersagbar Auf Konsistenz achten!

21 Updates (cont.) Udates passieren erst bei der nächsten step Anweisung: var x = 0 var y = 1 Main() step x := 5 WriteLine(`erst ist x=0: ` + x) step WriteLine(`x wurde aktualisiert` + x)

22 Updates (cont.) das Austauschen von Variablen-Werten ist ebenfalls ASM-konform: var x = 0 var y = 1 Main() step // x und y vertauschen x := y y := x step // x ist nun 1 // y ist nun 0

23 Methoden Ähnlich anderen Programmiersprachen Funktionen vs. Update-Prozeduren Unterscheidung lokaler und globaler Variablen Method Overloading ebenfalls unterstützt

24 Methoden (cont.) var Count Increment() // update Prozedur Count := Count + 1 CurentCounter() as Integer // Funktion return Count Main() step Increment() step WriteLine( currentCounter ) var Count Increment() // update Prozedur Count := Count + 1 CurentCounter() as Integer // Funktion return Count Main() step Increment() step WriteLine( currentCounter )

25 Methoden (cont.) s = {1, 8, 2, 12, 13, 6} Max ( i as Integer, j as Integer) as Integer return (if i > j then i else j) Max (s as Set of Integer) as Integer return (any m | m in s where not (exists n in s where n > m) ) Main() step WriteLine( Max(s)) WriteLine( Max(2,3)) s = {1, 8, 2, 12, 13, 6} Max ( i as Integer, j as Integer) as Integer return (if i > j then i else j) Max (s as Set of Integer) as Integer return (any m | m in s where not (exists n in s where n > m) ) Main() step WriteLine( Max(s)) WriteLine( Max(2,3))

26 Werte Normale Variablen Eingebaute Datentypen Null, Bool Byte, Short, Integer, Long, Float, Double, Char, String Seq, Set, Map Tupel Benutzerdef. Strukturen und Klassen Konstanten Optional typisiert lokal oder global

27 Werte: Strukturen structure InputEvent case KeyInput key as Char case SwitchInput toggle as Boolean case CoinReturn //no data needed HandleInput(e as InputEvent) match e KeyInput(k):WriteLine(`Key: ` + k) SwitchInput(t):WriteLine(`Switch: `+ t) CoinReturn():WriteLine(`Coin return`) Main() step 1:HandleInput(KeyInput(`a`)) step 2:HandleInput(CoinReturn()) structure InputEvent case KeyInput key as Char case SwitchInput toggle as Boolean case CoinReturn //no data needed HandleInput(e as InputEvent) match e KeyInput(k):WriteLine(`Key: ` + k) SwitchInput(t):WriteLine(`Switch: `+ t) CoinReturn():WriteLine(`Coin return`) Main() step 1:HandleInput(KeyInput(`a`)) step 2:HandleInput(CoinReturn())

28 Werte: Klassen Enthalten (Daten-) Felder Ermöglichen Referenzen Ableitungen wie OO class Person var name as String var age as Integer p1 = new Person(`Anne`, 37) p2 = new Person(`Kurt`, 12) Writeline(p1.name)

29 Werte: Klassen (cont.) class BasicBox var length as Double var width as Double var heigth as Double Volume() as Double return (length * width * heigth) class FragileBox extends BasicBox Volume() as Double return (0.85 * length * width * heigth) basicBox1 = new BasicBox(1.0, 1.0, 2.0) WriteLine(basicBox1.Volume()) class BasicBox var length as Double var width as Double var heigth as Double Volume() as Double return (length * width * heigth) class FragileBox extends BasicBox Volume() as Double return (0.85 * length * width * heigth) basicBox1 = new BasicBox(1.0, 1.0, 2.0) WriteLine(basicBox1.Volume())

30 Werte: Mengen A = {1, 3,5,7, 11} B = {1..20} C = {i | i in B where 2 * i in B} E = (L union F) I = (L intersect F) n = size(L) A = {1, 3,5,7, 11} B = {1..20} C = {i | i in B where 2 * i in B} E = (L union F) I = (L intersect F) n = size(L) Definition durch Aufzählung Wertebereich arithmetischen Ausdruck Operationen Vereinigung, Durchschnitt, Mächtigkeit,... Relationen Teilmenge, Element,...

31 Werte: Listen leer = [] l = [1, 2, 4, 4, 2] Main() step WriteLine(l(1)) // gibt 2 aus, da Listen null-basiert sind leer = [] l = [1, 2, 4, 4, 2] Main() step WriteLine(l(1)) // gibt 2 aus, da Listen null-basiert sind Wie Mengen: nur Elemente gleichen Typs zulässig Anders als Mengen: Reihenfolge wird beachtet Elemente können mehrfach vorkommen

32 Werte: Maps var phoneNumber as Map of String to Integer phoneNumber = {`Bob`-> 100, `Carla`-> 102} WriteLine(`Carlas number is ` + phoneNumber(`Carla`)) var phoneNumber as Map of String to Integer phoneNumber = {`Bob`-> 100, `Carla`-> 102} WriteLine(`Carlas number is ` + phoneNumber(`Carla`)) Abbildungen von Schlüsseln auf Werte Definition durch: Explizite Einträge Arithmetische Ausdrücke Operationen Indizes, Werte Vereinigung

33 Werte: Maps (cont.) var phoneNumber as Map of String to Integer = {`Bob` -> 100, `Carla` -> 101, `Jim` -> 102, `Denni` -> 103 } Main() step y = {j | i -> j in phoneNumber where j < 103} WriteLine(y) var phoneNumber as Map of String to Integer = {`Bob` -> 100, `Carla` -> 101, `Jim` -> 102, `Denni` -> 103 } Main() step y = {j | i -> j in phoneNumber where j < 103} WriteLine(y)

34 Werte: Arrays Nutzung von Mengen, Listen und Abbildungen statt Arrays Iteration mit step foreach step forall Adressierung eines bestimmten Eintrags c = [r, b, g] WriteLine(c(0)) Auswahl eines beliebigen Eintrags choose x in {`ja`, `nein`, `vielleicht`}

35 Werte: Aufzählungstypen enum Farben Rot Gelb Grün Blau var f as Farben = Rot WriteLine(f) // gibt Rot aus enum Farben Rot Gelb Grün Blau var f as Farben = Rot WriteLine(f) // gibt Rot aus Symbolische konstanten wie beispielsweise in C++ Initialisierungen automatisch, partiell oder total möglich

36 Exkurs: Datentypen f. F. Einfache Datentypen String, Integer, Boolean, Null,... var v0 as Integer var v1 as (Integer, Integer, String) Options-Typen var v2 as Integer or String var v3 as String or Null var v3 as String? var v4 as (Integer?, Set of String)?

37 Exkurs: Datentypen f. F. (cont.) SomeFunction(x as Integer or String) as String if x is Integer then return `Found Integer.` else return `Found String.` Main() step 1:WriteLine(SomeFunction(2)) step 2:WriteLine(SomeFunction(`abc`) step 3:WriteLine(SomeFunction(3.0) SomeFunction(x as Integer or String) as String if x is Integer then return `Found Integer.` else return `Found String.` Main() step 1:WriteLine(SomeFunction(2)) step 2:WriteLine(SomeFunction(`abc`) step 3:WriteLine(SomeFunction(3.0)

38 Auswahl Ausdrücke Main() let S = {1, 2, 3, 4, 5} let T = {-1, 2, 5, 7} step let u1 = (any i | i in S where i < 4) let u2 = (the i | i in S where i < 1) let u3 = (sum i | i in S) step let v1 = (max x + y | y in S, y in T) let v2 = (the value | value in T where value notin S) let v3 = (min x | x in S union T) Main() let S = {1, 2, 3, 4, 5} let T = {-1, 2, 5, 7} step let u1 = (any i | i in S where i < 4) let u2 = (the i | i in S where i < 1) let u3 = (sum i | i in S) step let v1 = (max x + y | y in S, y in T) let v2 = (the value | value in T where value notin S) let v3 = (min x | x in S union T)

39 Quantoren S = {1, 2, 3, 4, 5, 6} //... Main() v1 = forall i in S holds odd(i) v3 = forall i in S where i > 4 holds odd(i) v2 = forall i in S, j in S holds i mod j < 6 v2 = exists i in S where i > 4 v4 = forall i in S holds exists j in S where i < j v5 = exists i in S where exists j in S where i < j v6 = exists i in S, j in S where i + 1 = j S = {1, 2, 3, 4, 5, 6} //... Main() v1 = forall i in S holds odd(i) v3 = forall i in S where i > 4 holds odd(i) v2 = forall i in S, j in S holds i mod j < 6 v2 = exists i in S where i > 4 v4 = forall i in S holds exists j in S where i < j v5 = exists i in S where exists j in S where i < j v6 = exists i in S, j in S where i + 1 = j

40 Zusicherungen Incr(x as Integer) as Integer require x >= 0 ensure result = x + 1 return ((((x + 1) * 2) - 2) / 2) + 1 Main() step WriteLine(Incr(1)) step WriteLine(Incr(99)) Incr(x as Integer) as Integer require x >= 0 ensure result = x + 1 return ((((x + 1) * 2) - 2) / 2) + 1 Main() step WriteLine(Incr(1)) step WriteLine(Incr(99))

41 Die Explore-Anweisung Finden verschiedener Möglichkeinten bei deterministischen Fkt. nur eine sonst entspr. mehrere Choose() as (Integer, Integer) x = any i | i in {1..3} y = any i | i in {2..x} return (x,y) Main() WriteLine(explore Choose()) WriteLine(search Choose()) Choose() as (Integer, Integer) x = any i | i in {1..3} y = any i | i in {2..x} return (x,y) Main() WriteLine(explore Choose()) WriteLine(search Choose())

42 Auswahl der Schlüsselwörter addandanyascasecatchchoose classelseelseifensureenum enumerated error existsexploreextendsfixpointforallforeachholds ififnone implements impliesimportininitially interface intersect isletmatchmaxmerge minmod namespace newnotnotinof operatororremoverequire resulting returnsearch skipstepstructuresumthethenthrow trytypeunionuntilvarwherewhile ->..:= +=( )[ ]{ }| + - * /< (lt)> (gt)= (eq)<= (le)>= (ge)<> (ne)

43 AsmL Informationen bei Microsoft Folien zum Vortrag unter

44