Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen
|
|
- Sylvia Lang
- vor 6 Jahren
- Abrufe
Transkript
1 Teil IV Semantik imperativer Sprachen 201
2 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap. 3) Maschinensemantik: basiert auf Übersetzung in Abstrakten Maschinencode denotational ( funktionale Sprache als Metasprache) axiomatisch: logische Schlussregeln für jedes Sprachkonstrukt hier: am Beispiel der einfachen imperativen Sprache IMP 202
3 2. Syntax von IMP IMP umfasst: Anweisungen, arithmetische und boolesche Ausdrücke es fehlen u.a.: Prozeduren, Funktionen, Rekursion, statische und dynamische Datenstrukturen, I/O Z ganze Zahlen; z, z, z 1, z 2,... IB := {true, false} boolesche Werte; β, β 1, β 2 Op := Aop Bop Relop = {+,,,...} {,, } {==, <=,...} Operationssymbole Var Variablen; x, y, x, y,
4 Syntax von IMP (2) Aexp arithm. Ausdrücke; e, e, e 1, e 2,... Bexp bool. Ausdrücke; b, b, b 1, b 2,... Com Anweisungen; c, c, c 1, c 2,... Mengen Z, IB, Op, Var vorgegeben Mengen Aexp, Bexp, Com gemäß folgender Backus-Naur-Form Aexp : e ::= z x e 1 e 2 Aop Bexp : b ::= true false e 1 e 2 b b 1 b 2 mit Relop, Bop { } Com : c ::= skip x := e c 1 ; c 2 if b then c 1 else c 2 while b do c 204
5 Abstrakte Syntax hier: abstrakte Syntax, Parsing vernachlässigt konkrete Syntax: (u.a.) Präzedenzregeln und Klammerung zur Klärung der syntaktischen Struktur, z.b.: (13 (22 + 4)) *
6 3. Reduktionssemantik von IMP imperative Programmiersprache: Loc Menge der Speicherplätze; α, α, α 1, α 2,... Zustand (Belegung der Speicherplätze) Ausdrücke werden in Zustand und Umgebung ausgewertet Anweisungen bewirken Zustandstransformation Σ := {σ σ : Loc Z} Menge der Zustände Env := {ρ ρ : Var Loc} Menge der Umgebungen Reduktionsrelation (Aexp Env Σ) Z (Bexp Env Σ) IB (Com Env Σ) Σ 206
7 Syntax-orientierte Definition von Semantik arithmetischer Ausdrücke 1) z, ρ, σ z (Axiom; infix) 2) x, ρ, σ σ(ρ(x)) 3) e 1, ρ, σ z 1 e 2, ρ, σ z 2 e 1 e 2, ρ, σ z wobei z := z 1 z 2, Aop } Prämisse }Konklusion Bemerkung: i.a. nicht-deterministisch, hier: deterministisch 207
8 Semantik boolescher Ausdrücke 4) true, ρ, σ true false, ρ, σ false 5) e 1, ρ, σ z 1 e 2, ρ, σ z 2 e 1 e 2, ρ, σ β wobei β := z 1 z 2, Relop 6) strikte Interpretation von Bop: b 1, ρ, σ β 1 b 2, ρ, σ β 2 b 1 b 2, ρ, σ β wobei β := β 1 β 2, Bop { } ( analog, jedoch nur ein Argument) 208
9 Nicht-strikte Interpretation boolscher Operationen Argumente werden nur ausgewertet, wenn nötig b z.b. sequentielles : 1, ρ, σ false b 1 b 2, ρ, σ false b 1, ρ, σ true b 2, ρ, σ β b 1 b 2, ρ, σ β analog: sequentielles 209
10 Semantik von Anweisungen Notation: σ[α/z] { : Loc Z def. durch z, falls α = α σ[α/z](α ) := 7) skip, ρ, σ σ 8) σ(α ), sonst e, ρ, σ z x := e, ρ, σ σ[ρ(x)/z] 9) c 1, ρ, σ σ 1 c 2, ρ, σ 1 σ 2 c 1 ; c 2, ρ, σ σ 2 10) b, ρ, σ true c 1, ρ, σ σ 1 if b then c 1 else c 2, ρ, σ σ 1 nicht strikt! b, ρ, σ false c 2, ρ, σ σ 2 if b then c 1 else c 2, ρ, σ σ 2 210
11 11) Semantik von Anweisungen (Fortsetzung) b, ρ, σ false while b do c, ρ, σ σ b, ρ, σ true c, ρ, σ σ 1 while b do c, ρ, σ 1 σ 2 while b do c, ρ, σ σ 2 Bemerkungen: 1) die operationelle Semantik definiert Äquivalenz auf arithm. und bool. Ausdücken sowie Anweisungen Programmtransformation, Optimierung 2) alternative Semantiken: schrittweise Auswertung von Ausdrücken und Anweisungen verschiedene Möglichkeiten zur Festlegung der Größe eines Schritts 3) aus der SOS-Semantik lässt sich leicht ein Interpreter gewinnen 211
12 Beispielauswertung eines Programms while x>0 do (y := x*y; x:= x-1) wobei: Lemma 1: Lemma 2: ρ 0 (x) = α 1 σ 0 (α 1 ) = 1 ρ 0 (y) = α 2 σ 0 (α 2 ) = 1 ρ 0 (z) =, falls z {x, y} σ 0 (α) =, falls α {α 1, α 2 } x, ρ 0, σ 0 1 y, ρ 0, σ 0 1 x y, ρ 0, σ 0 1 y := x y, ρ 0, σ 0 σ 0 [α 2 /1] }{{} =:σ 1 x, ρ 0, σ 1 1 1, ρ 0, σ 1 1 x 1, ρ 0, σ 1 0 x := x 1, ρ 0, σ 1 σ 1 [α 1 /0] }{{} =:σ 2 212
13 Lemma 3: Lemma 1 Lemma 2 y := x y; x := x 1, ρ 0, σ 0 σ 2 Lemma 4: x, ρ 0, σ 2 0 0, ρ 0, σ 2 0 x > 0, ρ 0, σ 2 false while x > 0 do (y := x y; x := x 1), ρ 0, σ 2 σ 2 Hauptrechnung: x, ρ 0, σ 0 1 0, ρ 0, σ 0 0 Lemma 3 Lemma 4 x > 0, ρ 0, σ 0 true while x > 0 do (y := x y; x := x 1), ρ 0, σ 0 σ 2 213
14 4.1 Abstrakter Maschinencode 4. Maschinen-Semantik von IMP abstrakte Stackmaschine mit Datenkeller und Hauptspeicher erweiterbar um Funktionskeller, Heap,... für rekursive Funktionen, dynamische Datenstrukturen,... Speicher: SM := BZ DK HS BZ := IN DK := Z (Menge der) Stackmaschinenzustände Befehlszähler Datenkeller HS := Z Loc (d.h. Loc Z) Hauptspeicher Zustand: s = (m, d, h) SM 214
15 Befehlsvorrat Instr 1) arithmetische, relationale und logische Befehle: ADD, SUB, MULT,...,EQ,LEQ,...,AND,OR,NOT (hier: 0-Adress-Befehle (Operanden auf Datenkeller), alternativ: 1-,2- oder 3-Adress-Befehle) 2) Transportbefehle: LOAD α, STO α, LIT z 3) Sprungbefehle: JMP m, JPF m (m BZ ) 215
16 C[[Γ]] : SM SM C[[SUB]] (m, d, h) := Befehlssemantik C[[LIT z]] (m, d, h) := (m + 1, z : d, h) Γ Instr }{{} if d = z 1 : z 2 : d then (m + 1, (z 2 z 1 ) : d, }{{} Metasprache ausgerechnet! analog: ADD, EQ, AND,... C[[LOAD α]] (m, d, h) := (m + 1, h(α) : d, h) C[[STO α]] (m, d, h) := if d = z : d then (m + 1, d, h[α/z]) C[[JMP m ]] (m, d, h) := (m, d, h) C[[JPF m ]] (m, d, h) := if d = 0 : d then (m, d, h) else if d = 1 : d then (m + 1, d, h) 216
17 Zwischencode (Z-Code) P Z Code : P = Γ 1 ;... ; Γ p Zwischencode-Semantik M : Z Code SM SM mit p IN +, Γ i Instr M[[ }{{} P ]] (m, d, h) := if 1 m p then M[[P]](C[[Γ m ]] (m, d, h)) Γ 1 ;...,Γ p else (m, d, h) 217
18 Symbolischer Zwischencode (SZ-Code) wegen induktiver Codegenerierung zunächst: symbolische Adressen Label := { l i i IN} (u.u.) mehrere Labels für einen Befehl P SZ Code : P = w 1 Γ 1 ;... ; w p Γ p ; w p+1 mit p 1, w i Labels Γ i (Instr {JMP m, JPF m m BZ }) {JMP l, JPF l l Label} Vor.: Labels aus w 1... w p+1 paarweise verschieden 218
19 4.2 Übersetzung in Abstrakten Maschinencode trans : Com Tab Z Code Symboltabelle: Tab := {st st : Var Loc} Übersetzung arithmetischer Ausdrücke exptrans : Aexp Tab SZ Code exptrans [[ z ]] st := LIT z; exptrans [[ x ]] st := LOAD st(x); exptrans [[ e 1 e 2 ]] st := exptrans [[ e 1 ]] st exptrans [[ e 2 ]] st OP; mit OP {ADD, SUB,...} 219
20 Übersetzung boolescher Ausdrücke bexptrans : Bexp Tab SZ Code bexptrans [[ true ]] st := LIT 1; bexptrans [[ false ]] st := LIT 0; bexptrans [[ e 1 e 2 ]] st := exptrans [[ e 1 ]] st exptrans [[ e 2 ]] st ROP; mit ROP {EQ, LEQ,...} 220
21 Übersetzung boolescher Ausdrücke (2) bexptrans [[ b 1 b 2 ]] st := bexptrans [[ b 1 ]] st bexptrans [[ b 2 ]] st BOP; mit BOP {AND, OR}, strikt! bexptrans [[ b ]] st := bexptrans [[ b ]] st NOT; alternative Übersetzung boolescher Ausdrücke über Kontrollfluss (nicht strikt!) 221
22 Übersetzung von Anweisungen cmdtrans : Com Tab SZ Code cmdtrans [[ skip ]] st := ε (leerer Code) cmdtrans [[ x := e ]] st := exptrans[[ e ]] st STO st(x); cmdtrans [[ c 1 ; c 2 ]] st := cmdtrans [[ c 1 ]] st cmdtrans [[ c 2 ]] st 222
23 Übersetzung von Anweisungen (2) cmdtrans [[ if b then c 1 else c 2 ]] st := bexptrans [[ b ]] st JPF l 1 ; cmdtrans [[ c 1 ]] st JMP l 2 ; l 1 : cmdtrans [[ c 2 ]] st l 2 : wobei: l 1, l 2 neue Labels 223
24 Übersetzung von Anweisungen (3) cmdtrans [[ while b do c ]] st := l 1 : bexptrans [[ b ]] st JPF l 2 ; cmdtrans [[ c ]] st JMP l 1 ; l 2 : wobei: l 1, l 2 neue Labels eigentlich noch notwendig: (hier zur Vereinfachung weggelassen) Ersetzung der symbolischen Labels durch Speicheradressen 224
25 Maschinen-Semantik eines IMP-Programms ˆM : Com Env Σ Σ ˆM [[ c ]] ρ σ := out(m [[ trans[[c]] ρ ]] (1, ε, σ)) wobei out(m, d, h) := h alternative Definition: ˆM : Z k Z k 225
26 Beispiel: Maschinensemantik ˆM [[ while x>0 do (y:=x*y; x:= x-1) ]] ρ 0 σ 0 =? zunächst: cmdtrans [[ while x>0 do (y:=x*y; x:= x-1) ]] l 1 : bexptrans [[ x > 0 ]] st 0 l 0 : JPF l 0 cmdtrans [[ y := x y; x := x 1 ]] st 0 JMP l 1 =ρ 0 {}}{ st 0 = = l 1 : exptrans [[ x ]] st 0 STO st 0 (y); exptrans [[ 0 ]] st 0 GTH; JPF l 0 ; exptrans [[ x y ]] st 0 l 0 : exptrans [[ x 1 ]] st 0 STO st 0 (x); JMP l 1 ; 226
27 Erzeugter Maschinencode im Beispiel P := trans [[ while x>0 do (y:=x*y; x:= x-1) ]] st 0 = LOAD 1; LIT 0; GTH; JPF 14; LOAD 1; LOAD 2; MULT; STO 2; LOAD 1; LIT 1; SUB; STO 1; JMP 1; 227
28 Maschinenberechnung im Beispiel M [[ P ]] (1, ε, =σ 0 {}}{ h 0 ) = M [[ P ]] (2, 1, h 0 ) = M [[ P ]] (3, 0 : 1, h 0 ) = M [[ P ]] (4, 1, h 0 ) = M [[ P ]] (5, ε, h 0 ) = M [[ P ]] (6, 1, h 0 ) = M [[ P ]] (7, 1 : 1, h 0 ) = M [[ P ]] (8, 1, h 0 ) = M [[ P ]] (9, ε, h 0 [2/1]) = }{{} =h 0 M [[ P ]] (10, 1, h 0 ) = M [[ P ]] (11, 1 : 1, h 0 ) = M [[ P ]] (12, 0, h 0 ) = M [[ P ]] (13, ε, h 0 [1/0]) = }{{} =:h 1 M [[ P ]] (1, ε, h 1 ) = M [[ P ]] (2, 0, h 1 ) = M [[ P ]] (3, 0 : 0, h 1 ) = M [[ P ]] (4, 0, h 1 ) = M [[ P ]] (14, ε, h 1 ) = (14, ε, h 1 ) out(14, ε, h 1 ) = h 1 228
Zwischencodeerzeugung Compiler II
Zwishenodeerzeugung Compiler II Prof. Dr. Ursula Goltz 14.09.2012 Einleitung Front-End... Parser Sem. Analys Zwishenodegenerator Bak-End Codegenerator... Zwishendarstellung (Zwishenode) evtl. mashinennunabh.
MehrDavid Harel, Dexter Kozen, Jerzy Tiuryn. Dynamic Logic. The MIT Press, 2000.
Kapitel 6 Programme In diesem Kapitel beschäftigen wir uns mit der Semantik von Programmen. Dazu betrachten wir eine kleine, idealisierte Programmiersprache IMP, die als Teilsprache von C aufgefasst werden
MehrSemantik von Programmiersprachen
Semantik von Programmiersprachen Prof. Dr. Manfred Schmidt-Schauß SS 2013 Stand der Folien: 15. April 2013 Semantik von Programmen verschiedene Semantiken: operationale Semantik (Spezifikation eines Interpreters)
MehrEinführung Grundbegriffe
Einführung Grundbegriffe 1.1 Der Modellbegriff Broy: Informatik 1, Springer 1998 (2) Die Modellbildung der Informatik zielt auf die Darstellung der unter dem Gesichtspunkt einer gegebenen Aufgabenstellung
MehrLemma Für jede monotone Grammatik G gibt es eine kontextsensitive
Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Grammatik G mit L(G) = L(G ). Beweis im Beispiel (2.): G = (V,Σ, P, S) : P = {S asbc, S abc, CB BC, ab ab, bb bb, bc bc, cc cc}. (i) G
MehrProgrammieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
MehrKode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen
Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Darstellung des eingegebenen Programms Wähle Zielarchitektur Wähle abstrakte
MehrImperative vs. Funktionale Programmierung
Beispiel: Entwerfe eine Funktion, die testet, ob eine Zahl n eine Primzahl ist oder nicht. Beobachtung: (1) Wenn n Primzahl ist, ist die Menge der Teiler von n leer. (2) Die Menge der Teiler von n sind
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
MehrStatt (r s) schreiben wir in Zukunft meistens rs, gelegentlich auch (r; s).
14 2 REGULÄRE AUSDRÜCKE 2 Reguläre Ausdrücke Wir wollen (i.a. unendliche) Sprachen mit endlichen Mitteln darstellen, z.b. durch Grammatiken, nach denen die Sätze der Sprache gebildet werden dürfen. Es
MehrDie Programmiersprache C Eine Einführung
Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert
MehrEinfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache
MehrInterpreter - 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
MehrAlgorithmen und Datenstrukturen 1 Kapitel 4.1
Algorithmen und Datenstrukturen 1 Kapitel 4.1 Technische Fakultät robert@techfak.uni-bielefeld.de Vorlesung, U. Bielefeld, Winter 2005/2006 Kapitel 4: Maschinenmodelle [Dieses Kapitel hält sich eng an
MehrMächtigkeit von WHILE-Programmen
Mächtigkeit von WHILE-Programmen Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 26. November 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit
MehrProgrammierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.
1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache
MehrC.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
MehrTeil IX. Eine kleine Programmiersprache
Teil IX Eine kleine Programmiersprache 1 Teil IX.1 Syntaktische Beschreibungsmittel 2 Chomsky Grammatik Eine Chomsky Grammatik wird beschrieben mit einem Quadrupel G = (N, T, P, S). Dabei ist: N die Menge
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2010 I. Die
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Übung Simon Wacker Karlsruher Institut für Technologie Wintersemester 2015/2016 GBI Grundbegriffe der Informatik Karlsruher Institut für Technologie 1 / 13 Programmiersprachen
Mehr4. Induktives Definieren - Themenübersicht
Induktives Definieren 4. Induktives Definieren - Themenübersicht Induktives Definieren Natürliche Zahlen Operationen auf natürlichen Zahlen Induktive Algorithmen Induktiv definierte Mengen Binärbäume Boolesche
MehrEinführung in die Theoretische Informatik
Einführung in die Theoretische Informatik Johannes Köbler Institut für Informatik Humboldt-Universität zu Berlin WS 2011/12 Die Registermaschine (random access machine, RAM) 0 I 0 1 I 1 2 I 2 m I m Programm
MehrProgrammierung in Python
Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P
MehrKapitel L:II. II. Aussagenlogik
Kapitel L:II II. Aussagenlogik Syntax der Aussagenlogik Semantik der Aussagenlogik Eigenschaften des Folgerungsbegriffs Äquivalenz Formeltransformation Normalformen Bedeutung der Folgerung Erfüllbarkeitsalgorithmen
MehrALP I Einführung in Haskell
ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?
MehrEinführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrAlgorithmen und Programmierung
Algorithmen und Programmierung Kapitel 5 Formale Algorithmenmodelle A&P (WS 14/15): 05 Formale Algorithmenmodelle 1 Überblick Motivation Formale Algorithmenmodelle Registermaschine Abstrakte Maschinen
MehrMathematik für Informatiker I
Mathematik für Informatiker I Mitschrift zur Vorlesung vom 19.10.2004 In diesem Kurs geht es um Mathematik und um Informatik. Es gibt sehr verschiedene Definitionen, aber für mich ist Mathematik die Wissenschaft
MehrSemantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence
Semantics of a Call-by-Need Lambda Calculus with McCarthy s amb for Program Equivalence David Sabel Institut für Informatik Fachbereich Informatik und Mathematik Goethe-Universität Frankfurt Kolloquium
MehrKapitel 4. Induktive Definitionen und Beweise
Kapitel 4 Induktive Definitionen und Beweise Bei der Definition der Semantik der Programmiersprache IMP haben wir an vielen verschiedenen Stellen induktive Definitionen benutzt: angefangen bei der Syntax
Mehr68000 Assembler. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren.
WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren. Ein Programm liegt der CPU in binärer Form vor und wird durch den Assembler in einer primitiven
MehrCompiler, Übersetzer. Allgemeine Erklärung / Definition
Compiler, Übersetzer Allgemeine Erklärung / Definition Ein Übersetzer ist ein Programm, das ein S 1 -Wort den Quelltext in ein S 2 -Wort umwandelt den Zieltext wobei die Semantik erhalten bleibt. Frage:
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
MehrÜbungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.
Eine Anweisung wird mit dem Wertzuweisungsoperator = geschrieben. Eine Anweisung wird mit dem Wertzuweisungsoperator = geschrieben. Daher ist y = x + 5.6; keine Gleichung, sondern die Anweisung den Wert
Mehrzu 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
MehrLOOP-Programme: Syntaktische Komponenten
LOOP-Programme: Syntaktische Komponenten LOOP-Programme bestehen aus folgenden Zeichen (syntaktischen Komponenten): Variablen: x 0 x 1 x 2... Konstanten: 0 1 2... Operationssymbole: + Trennsymbole: ; :=
MehrRandom Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines
Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines Wolfgang Schreiner Wolfgang.Schreiner@risc.jku.at Research Institute for Symbolic Computation (RISC) Johannes Kepler University,
MehrGrammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)
Grammatiken Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V Startsymbol S V Produktionen P ( (V Σ) \ Σ ) (V Σ) Kurzschreibweise G = (V, Σ, P, S) Schreibweise für Produktion (α, β) P: α β 67 /
MehrWas bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
MehrFachseminar. Semantische Analyse
Fachseminar Vortragender: Arton Berisha Thema : Semantische Analyse Kursleiter: Prof. Dr. Helmut Weber Agenda 1. Einleitung 1.1 Phasen eines Compilers 1.2 Symboltabelle 2. Semantische Analyse 2.1 Was ist
MehrInformatik I Übung, Woche 40
Giuseppe Accaputo 2. Oktober, 2014 Plan für heute 1. Fragen & Nachbesprechung Übung 2 2. Zusammenfassung der bisherigen Vorlesungsslides 3. Tipps zur Übung 3 Informatik 1 (D-BAUG) Giuseppe Accaputo 2 Nachbesprechung
MehrKOP / FBS - Programmierung
KOP / FBS - Programmierung Programmieren in Anweisungsliste Programmieren in strukturierten Text Programmieren in Kontaktplan Programmieren in Funktionsbausteinsprache KOP Programmierung (1) 2 1 Neues
MehrJavaScript. 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
MehrEinführung in die Informatik Algorithms
Einführung in die Informatik Algorithms Vom Problem zum Algorithmus und zum Programm Wolfram Burgard Cyrill Stachniss 1.1 Motivation und Einleitung In der Informatik sucht man im Normalfall nach Verfahren
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrEntwicklung eines korrekten Übersetzers
Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung
MehrLambda-Kalkül. Philipp Meyer. 28. April 2009
Lambda-Kalkül Philipp Meyer 28. April 2009 1 Einleitung Der λ-kalkül ist eine von Alonzo Church und Stephen Kleene in den 1930er Jahren eingeführtes Modell zur Beschreibung berechenbarer Funktionen. Es
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrDiskrete Strukturen Kapitel 2: Grundlagen (Beweise)
WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14
MehrFunktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung
Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive
Mehr2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 14. Okt. 2015 Computeraufbau: nur ein Überblick Genauer: Modul Digitale Systeme (2. Semester) Jetzt: Grundverständnis
MehrFunktionale Programmierung
Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrAnfragen an XML-Dokumente mit XPath
Anfragen an XML-Dokumente mit XPath Heike Adel 21.06.2010 1 / 32 Motivation Gliederung Motivation Mit XPath kann man... Knoten aus XML-Dokumenten auswählen Werte aus XML-Dokumentdaten berechnen => ganz
MehrWiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen
Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter
MehrAlgorithmen & 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
MehrRekursive Funktionen Basisfunktionen
Rekursive Funktionen Basisfunktionen die nullstellige Funktion Z, die den konstanten Wert 0 liefert, die Funktion S : N N, bei der jeder natürlichen Zahl ihr Nachfolger zugeordnet wird, die Funktion P
MehrTheoretische Informatik. Alphabete, Worte, Sprachen
Theoretische Informatik Alphabete, Worte, Sprachen Alphabete, Worte, Sprachen 1. Alphabete und Worte Definitionen, Beispiele Operationen mit Worten Induktionsbeweise 2. Sprachen Definition und Beispiele
MehrInformationsverarbeitung auf Bitebene
Informationsverarbeitung auf Bitebene Dr. Christian Herta 5. November 2005 Einführung in die Informatik - Informationsverarbeitung auf Bitebene Dr. Christian Herta Grundlagen der Informationverarbeitung
MehrFunktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation
Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 5. Kontrollstrukturen Allgemein Kontrollstrukturen dienen zur Steuerung des Programmablaufs. (Bemerkung: C und C++ besitzen die selben Kontrollstrukturen.)
MehrProgrammiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen
Organisation und Einführung Studiengang Informatik Universität Bremen Sommersemester 2010 (Vorlesung am Montag, der 12. April 2010) (Montag, der 12. April 2008) 1 Vorstellung 2 Organisation 3 Einführung
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
Mehr3. Anweisungen und Kontrollstrukturen
3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen
MehrFormale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen
Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist
Mehr2.4 Kontextsensitive und Typ 0-Sprachen
Definition 2.43 Eine Typ 1 Grammatik ist in Kuroda Normalform, falls alle Regeln eine der folgenden 4 Formen haben: Dabei: A, B, C, D V und a Σ. Satz 2.44 A a, A B, A BC, AB CD. Für jede Typ 1 Grammatik
Mehrzu 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Übersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)
Motivation Funktionale Programmiersprachen Haskell Übersicht Einführung in die Funktionale Programmierung: Einleitung & Motivation Prof Dr. Manfred Schmidt-Schauß 1 Motivation Übersicht Programmierparadigmen
MehrRechnerarchitektur Teil 2
Rechnerarchitektur Teil 2 Fähigkeiten der Registermaschine und Sprachübersetzung Dipl.-Inform. Meiko Lösch 2006-05-12 Inhalt 1 Rechenfähigkeit Zuweisungen Rechnen Relationen 2 Programmierfähigkeit Schleifen
Mehr1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren
1 und der Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2015 27. Oktober 2015 B. Nebel Info I 3 / 21 Der Vergleichsoperatoren
MehrTheoretische Informatik SS 03 Übung 3
Theoretische Informatik SS 03 Übung 3 Aufgabe 1 a) Sind die folgenden Funktionen f : partiell oder total: f(x, y) = x + y f(x, y) = x y f(x, y) = x y f(x, y) = x DIV y? Hierbei ist x DIV y = x y der ganzzahlige
MehrVorsemesterkurs Informatik
Vorsemesterkurs Informatik Vorsemesterkurs Informatik Mario Holldack WS2015/16 30. September 2015 Vorsemesterkurs Informatik 1 Einleitung 2 Aussagenlogik 3 Mengen Vorsemesterkurs Informatik > Einleitung
MehrGrundlagen der Informatik I (Studiengang Medieninformatik)
Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de
MehrÜberblick und Wiederholung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-14-15/infoeinf WS14/15 Klausurinformationen 6 ECTS: Klausur 07.02.2015 10:15 12:15 Uhr (120
MehrEinführung in die Programmierung
Prof. Dr. Rudolf Berrendorf Fachbereich Informatik Fachhochschule Bonn-Rhein-Sieg URM - Programmierung Dipl.-Inf. Sigrid Weil Fachbereich Informatik Fachhochschule Bonn-Rhein-Sieg Einordnung Programmier-Paradigma:
MehrProgrammieren in Haskell Programmiermethodik
Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs
MehrAssembler-Programmierung
Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung
MehrDer λ-kalkül. Frank Huch. Sommersemester 2015
Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der
MehrNachholklausur Mathematik IV für Bachelor WIF und IF. Teil I : Stochastik
Otto-von-Guericke-Universität Magdeburg Montag, 02.02.09 Fakultät für Mathematik Prof. Dr. W. Kahle, Priv.-Doz. Dr. M. Kunik Wichtig: Nachholklausur Mathematik IV für Bachelor WIF und IF Teil I : Stochastik
Mehr1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit
Die Programmiersprache LOOP (i) Syntaktische Komponenten: Variable: x 0, x 1, x 2,... Konstanten: 0, 1, 2,... Trennsymbole: ; := Operationszeichen: + Schlüsselwörter: LOOP DO END (ii) LOOP-Programme: Wertzuweisungen:
MehrTag 6. Module, benannte Funktionen und Rekursion
Tag 6 Module, benannte Funktionen und Rekursion Wir verlassen nun die abgeschlossene kleine Welt des interaktiven Interpreters und lernen, wie man richtige Haskell-Programme schreibt. Im Interpreter haben
MehrEinige Teilgebiete der Informatik
Einige Teilgebiete der Informatik Theoretische Informatik Formale Sprachen, Automatentheorie, Komplexitätstheorie, Korrektheit und Berechenbarkeit, Algorithmik, Logik Praktische Informatik Betriebssysteme,
MehrBeispiel einer Übersetzung
Beispiel einer Übersetzung Ausdruck in C aktuelle_zeit = Startzeit + vergangene_minuten*60 + vergangene_sekunden; Ausdruck im Instruktionssatz des R10000 LW r1,minuten LW r1,sekunden ADDI r2,r0,60 ADD
Mehr13. Einführung in die Programmiersprache Strukturierter Text (ST)
13. Einführung in die Programmiersprache Strukturierter Text (ST) 13.1 Übersicht Strukturierter Text (ST, auch SCL) ist eine der sechs in IEC 61131-3 festgeschriebenen Programmiersprachen für Automatisierungstechnik.
MehrEinführung in die Funktionale Programmierung: Einleitung & Motivation
Einführung in die Funktionale Programmierung: Einleitung & Motivation Prof Dr. Manfred Schmidt-Schauß WS 2011/12 Stand der Folien: 25. Oktober 2011 Motivation Funktionale Programmiersprachen Haskell Übersicht
MehrSyntax von LOOP-Programmen
LOOP-Berechenbarkeit Syntax von LOOP-Programmen Definition LOOP-Programme bestehen aus: Variablen: x 0, x 1, x 2, x 3,... Konstanten: 0, 1, 2, 3,... Trennsymbolen:; und := Operationen: + und Befehlen:
MehrPhasen der Codegenerierung
Phasen der Codegenerierung 1. Vorverarbeitung Semantik basierte Optimierungen Basis: Zwischencode (abstrakter Syntaxbaum) 2. eigentliche (proper) Codegenerierung Erzeugung des Zielcodes (mit Optimierung)
MehrEscher funktionale und logische Programmierung
Escher funktionale und logische Programmierung Seminar Programming Languages From Hell Lars Hupel 2010-06-07 Dieses Werk ist lizenziert unter den Bedingungen der Creative Commons Namensnennung 3.0 Deutschland.
MehrLua Grundlagen Einführung in die Lua Programmiersprache
Lua Grundlagen Einführung in die Lua Programmiersprache 05.05.2014 Ingo Berg berg@atvoigt.de Automatisierungstechnik Voigt GmbH Die Lua Programmiersprache Was ist Lua? freie Programmiersprache speziell
MehrInduktive Definitionen
Induktive Definitionen Induktive Definition: Konstruktive Methode zur Definition einer Menge M von Objekten aus Basisobjekten mittels (Erzeugungs-) Regeln Slide 1 Rekursion über den Aufbau: Konstruktive
MehrInhalt Kapitel 5: Syntax
Inhalt Kapitel 5: Syntax 1 Syntax und Semantik 2 Formale Sprachen 3 Backus-Naur Form 4 Chomsky Grammatik 5 Reguläre Ausdrücke 6 Endliche Automaten 180 Syntax und Semantik Syntax Syntax: Festlegung des
MehrSprachen und Programmiersprachen
Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
MehrResolutionsalgorithmus
112 Resolutionskalkül Mit dem Begriff Kalkül bezeichnet man eine Menge von syntaktischen Umformungsregeln, mit denen man semantische Eigenschaften der Eingabeformel herleiten kann. Für den Resolutionskalkül:
MehrBinary Decision Diagrams (Einführung)
Binary Decision Diagrams (Einführung) Binary Decision Diagrams (BDDs) sind bestimmte Graphen, die als Datenstruktur für die kompakte Darstellung von booleschen Funktionen benutzt werden. BDDs wurden von
MehrGrundlagen der C++ - Programmierung für das MiniBoard von qfix 1
(16C++qfix.docx) Schich, Seminar Tübingen, 06.09.16 C++ für qfix Seite 1 von 5 Grundlagen der C++ - Programmierung für das MiniBoard von qfix 1 Vom Quelltext zum ausführbaren Programm Editor Die Programme
MehrWebbasierte Programmierung
Webbasierte Programmierung Eine Einführung mit anschaulichen Beispielen aus der HTML5-Welt apl. Prof. Dr. Achim Ebert Inhalt Kapitel 6: JavaScript Kontrollstrukturen Verzweigungen Einseitig, zweiseitig,
MehrProgrammierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische Semantik)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische
Mehr11.1 Grundlagen - Denitionen
11 Binärbäume 11.1 Grundlagen - Denitionen Denition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. In einem Baum gilt: (I) (II) 1 Knoten w ohne VATER(w), das ist die
MehrCrashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin
Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive
Mehr