Grundlagen der Informatik I

Größe: px
Ab Seite anzeigen:

Download "Grundlagen der Informatik I"

Transkript

1 Grundlagen der Informatik I Thema 8: Interpreter-basierte Semantik Intermezzo 1 in HTDP Chap. 4 in SICP () Prof. Dr. Mira Mezini Dr. Michael Eichberg

2 Chapter Overview Thema 8: Interpreter nach dem Substitutionsmodell 8.1 Einführung: Syntax und Semantik 8.2 Interpreterbasierte Semantik 8.3 Meta-Interpreter für ein Teil von Racket 8.4 Normale Auswertungsreihenfolge 8.5 Zusammenfassung 2

3 Thema 8: Interpreter-basierte Semantik 8.1 Einführung: Syntax und Semantik 3

4 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Syntax Ähnlich wie die natürlichen Sprachen haben auch die Programmiersprachen ein Vokabular und eine Grammatik. 4

5 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Syntax Der Ausdruck Syntax bezieht sich auf Vokabular und Grammatik von Programmiersprachen Vokabular: eine Sammlung der Wörter ', aus denen wir Sätze bilden können. Grammatik: sagt uns, wie wir ganze Sätze aus Wörtern bilden. 5

6 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Das Vokabular von Racket Vier Kategorien von Wörtern Namen von Operationen Namen von Werten Notation: Zeilen zählen Beispiele auf, getrennt durch Punkte bedeuten: es gibt noch mehr Dinge derselben Art in der Kategorie <name> = x a alon... <op> = area-of-disk perimeter... <lit> = true false 'a 'doll 'sum / <prm> = Literale: boolean, Symbole, Zahlen Primitive Operationen <prm>: Racket stellt sie von Anfang an zur Verfügung 6

7 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Beginning Student Racket <def> = (define (<op> <var>...<var>) <exp>) <exp> = <name> (define <var> <exp>) (define-struct <var0> (<var-1>...<var-n>)) <con> (<prm> <exp>...<exp>) (<op> <exp>...<exp>) (cond [<exp> <exp>]... [<exp> <exp>]) (cond [<exp> <exp>]... [else <exp>]) (and <exp> <exp>) Zwei Kategorien von Sätzen: Definitionen (<def>) und Ausdrücke (<exp>) (or <exp> <exp>) (if <exp> <exp> <exp>) 7

8 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Beginning Student Racket <def> = (define (<op> <var>... <var>) <exp>) <exp> = <name> (define <var> <exp>) (define-struct <var0> (<var-1>...<var-n>)) Drei Arten von Definitionen <con> (<prm> <exp>...<exp>) (<op> <exp>...<exp>) (cond [<exp> <exp>]... [<exp> <exp>]) (cond [<exp> <exp>]... [else <exp>]) (and <exp> <exp>) Kann auch leer sein (or <exp> <exp>) (if <exp> <exp> <exp>) 8

9 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Beginning Student Racket <def> = (define (<op> <var>...<var>) <exp>) <exp> = <name> (define <var> <exp>) (define-struct <var0> (<var-1>...<var-n>)) <lit> (<prm> <exp>...<exp>) (<op> <exp>...<exp>) (cond [<exp> <exp>]... [<exp> <exp>]) (cond [<exp> <exp>]... [else <exp>]) (and <exp> <exp>) Mehrere Arten von Ausdrücken Vereinfachte Grammatik: nicht alle erzeugbaren Ausdrücke sind gültig! (or <exp> <exp>) (if <exp> <exp> <exp>) 9

10 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Beginning Student Racket <def> = (define (<op> <var>... <var>) <exp>) (define <var> <exp>) (define-struct <var0> (<var-1>... <var-n>)) <exp> = <name> <lit> (<prm> <exp>... <exp>) (<op> <exp>... <exp>) (cond [<exp> <exp>]... [<exp> <exp>]) (cond [<exp> <exp>]... [else <exp>]) (and <exp> <exp>) (or <exp> <exp>) (if <exp> <exp> <exp>) 10

11 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Racket: Korrekte Ausdrücke 'all: Symbol (Literal), also ein Ausdruck x: Name, also ein Ausdruck (f x): eine Operationsaufruf, da x ein Name ist. 11

12 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Grammatik von Racket: Inkorrekte Ausdrücke (f define): stimmt teilweise mit der Form einer Operationsaufrufs überein, aber es benutzt define als sei es eine <exp>. (): Grammatik verlangt, dass nach jeder linken Klammer etwas anderes kommt als eine rechte Klammer. (cond x): kann kein korrekter cond-ausdruck sein, weil an zweiter Stelle ein Name steht, und nicht ein geklammertes Paar von Ausdrücken 12

13 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Semantik Nicht alle grammatikalisch richtigen Sätze sind sinnvoll weder in Deutsch noch in Programmiersprachen. Beispiele: Die Katze ist schwarz ' ist ein sinnvoller Satz. Der Ziegel ist ein Auto macht wenig Sinn, auch wenn der Satz grammatikalisch richtig ist. 13

14 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Semantik Um herauszufinden ob ein Satz sinnvoll ist, müssen wir die Bedeutung oder Semantik der Wörter und Sätze verstehen. Für Programmiersprachen gibt es verschiedene Wege, um den Sinn von einzelnen Ausdrücken zu erklären. Den Sinn von Racket- Programmen haben wir bisher mit einer Erweiterung der bekannten Gesetze aus Arithmetik und Algebra (Substitutionsmodell) diskutiert. 14

15 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Rückblick: Das bisherige Auswertungsmodell Zahlen, Symbole etc. à selbstauswertend make-struct, cons à selbstauswertend (lambda ( ) ) à selbstauswertend Primitive Operationen à entsprechende Maschinenbefehle ausführen. 15

16 Thema 8: Interpreter-basierte Semantik: Einführung: Syntax und Semantik Rückblick: Das bisherige Auswertungsmodell (define ) à Erweitere die Umgebung (local ) à Herausziehen der lokalen Definitionen auf oberste Ebene, jeweils neuen Namen vergeben (operator op-1 op-n): 1. Auswertung von operator sowie op-1 op-n 2. operator muss (lambda (x-1 x-n) exp) ergeben 3. Auswertung von exp, wobei exp sich aus exp durch Substitution der freien Vorkommen von x-1 x-n durch die Ergebnisse der Auswertung von op-1 op-n ergibt Lexikalisches Scoping 16

17 Thema 8: Interpreter-basierte Semantik 8.2 Interpreter als Semantik-Definition 17

18 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Interpreter-basierte Semantikdefinition Der Auswertungsprozess kann selbst als ein Rechenprozess modelliert werden, der als eine Operation präzisiert und implementiert werden kann. Der Interpreter einer Programmiersprache, der die Bedeutung ihrer Ausdrücke festlegt, ist auch nur ein Programm. Einige Programmiersprachen werden tatsächlich durch Interpreter definiert (z.b. Racket, SML) 18

19 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Interpreter-basierte Semantikdefinition Ein solcher Interpreter kann keine Fehler enthalten, weil er die Bedeutung definiert! Z. B. können wir dem Symbol + in einem Interpreter eine Multiplikationsoperation als Bedeutung zuweisen. Das ist kein Fehler, sondern eine mögliche Definition! Ein Fehler kann immer nur in Bezug auf eine Spezifikation festgestellt werden. 19

20 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Andere Arten von Semantikdefinitionen Informelle Sprachdefinitionen Formale Sprachdefinitionen Denotationelle Semantik Operationale Semantik... Wenn es eine explizite Definition einer Sprache gibt, macht es Sinn, von Fehlern eines Interpreters relativ zu einer Sprachdefinition zu sprechen. 20

21 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Terminologie der Interpreter-basierten Semantik Basissprache: die Sprache, in der der Interpreter implementiert ist (interpretierende Sprache). Interpretierte Sprache: die Sprache, die der Interpreter auswertet. Wenn die interpretierte Sprache und die Basissprache identisch sind, spricht man von einem Meta-Interpreter oder metazirkulären Interpreter. 21

22 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Turing Vollständigkeit Prinzipiell ist es möglich, in jeder Programmiersprache, die ein paar Basiskriterien erfüllt*), einen Interpreter für jede andere Programmiersprache zu schreiben. *) Gelten für nahezu jede universelle Programmiersprache (Java, C, Racket, Pascal, Perl, etc.) Eines der fundamentalen Resultate der Informatik 22

23 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Warum untersuchen wir Interpreter (Semantik)? Geheimnisse aufdecken, wie Konzepte implementiert sind à daraus tieferes Verständnis erlangen. Wir betrachten uns als Sprachentwickler und nicht nur als Nutzer einer Sprache, die andere entwickelt haben. Einblick gewinnen, wie neue Sprachen implementiert werden. 23

24 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Warum untersuchen wir Interpreter (Semantik)? Die Definition neuer Sprachen ist ein mächtiges Mittel, um Komplexität im Design zu kontrollieren. Neue Sprachen erhöhen unsere Fähigkeit, mit komplexen Problemen umzugehen, indem sie uns Mittel zur Verfügung stellen, mit deren Hilfe wir Probleme direkter beschreiben. 24

25 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Warum untersuchen wir Interpreter? Man kann viele Programme als einen Interpreter einer Sprache betrachten. Beispiel: Ein Programm zur Berechnung von Polynomen. Rechenregeln für Polynome werden als Operationen auf Listenstrukturen implementiert. Dieses Programm + Operationen zum Lesen und Ausgeben von Polynomen à Kern einer spezialisierten Sprache für die symbolische Mathematik. 25

26 Thema 8: Interpreter-basierte Semantik: Interpreter als Semantik-Definition Interpreterbasierte Semantik und Rekursion Wenn man einen Interpreter zur Sprachdefinition benutzt, setzt man voraus, dass der Nutzer die Bedeutung der Basissprache bereits versteht. Rekursionsanker ist meistens Prosa (deutsch/englisch) oder die Mathematik. Ein vieldiskutiertes Problem in der Mathematik (Modelltheorie vs. Beweistheorie) und der Philosophie, aber nicht Thema von GdI-1. 26

27 Thema 8: Interpreter-basierte Semantik 8.3 Meta-Interpreter für ein Teil von Racket 27

28 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Stopp #1 auf dem Weg Randnotiz #1: Racket ist besonders gut geeignet, um Sprachinterpreter zu schreiben. Einfache Syntax, wenige aber mächtige Sprachelemente Randnotiz #2: Der Interpreter enthält die grundlegende Struktur eines Interpreters für jede Ausdrucksorientierte Sprache, die verwendet werden kann, um Programme auf einer sequentiellen Maschine zu schreiben. 28

29 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Stopp #2 auf dem Weg Verwechseln Sie nicht die Basissprache mit der interpretierten Sprache! Wenn Sie einen Interpreter in Racket schreiben, beeinflusst das nicht die Auswertung des DrRacket Interpreters Wenn Ihr Interpreter bei + multipliziert, ergibt (+ 3 5) in DrRacket nach wie vor 8 J 29

30 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Die implementierten Sprachkonstrukte Explizit implementierte Sprachelemente Operationen (lambda) und Operationsapplikation Umgebung (define) if Implizit implementierte Sprachelemente Primitive Operationen (Addition, Multiplikation, ) Primitive Werte (Zahlen, boolesche Werte) Rekursion, Speicherverwaltung 30

31 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Ignorierte Sprachkonstrukte Ignorierte Sprachelemente define-struct local Definition nicht anonymer Operationen(define (f x) ) cond Kein Verlust der Ausdrucksstärke: Strukturen können mit Hilfe von Listen kodiert werden Explizite Operationsdefinitionen und local können mit lambda kodiert werden cond kann mit Hilfe von if kodiert werden 31

32 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Ignorierte Sprachkonstrukte (define (f x-1 x-n) exp) (define f (lambda (x-1 x-n) exp)) (local ((define var_1 val_1)... (define var_n val_n)) local-body) ((lambda (var_1... var_n) local-body) val_1... val_n) 32

33 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Aufbau des Interpreters Datendefinitionen für die Darstellung der Programme als Daten des Interpreters und die Überführung eines Programtextes in entsprechende Datenelemente. Auswertungsoperation (eval...) 33

34 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Darstellung der Programme als Daten Datendefinitionen für die Darstellung der Programme als Daten des Interpreters und die Überführung eines Programtextes in entsprechende Datenelemente. Auswertungsoperation (eval...) 34

35 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten S-Expressions Programme werden als verschachtelte Listen von Symbolen repräsentiert. Solche Listen werden S-Expressions genannt. '((lambda (n) (if (= n 0) 1 (* n (- n 1))) 5) 35

36 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Parser und abstrakte Syntax Parser: Ein Programm, das ein S-Expression zu einem abstrakten Syntaxbaum (AST: Abstract Syntax Tree) application verwandelt. operator operands '((lambda (n) (if (= n 0) 1 (* n (- n 1))) 5) proc '(5) parameters exp '( ) if-clause predicate consequent alternative PARSER variable name 'n (make-application (make-proc (list n) (make-if-clause...)) (list 5) ) 36

37 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Definition der abstrakten Syntax ;; An expression exp is either: ;; ;; 1. (make-definition var val) where ;; var is a symbol and val is an exp ;; ;; 2. (make-proc params exp) where ;; params is a list-of-symbols and exp is an exp ;; ;; 3. (make-if-clause predicate c a) where ;; predicate, consequent, and alternative are exp ;; ;; 4. (make-application operator operands) where ;; operator is an exp and operands is (listof exp) ;; ;; 5. (make-variable n) where n is a symbol ;; ;; 6. a number or a boolean or a string 37

38 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Definition der abstrakten Syntax ;; definition-exp (define-struct definition (variable value)) ;; proc-exp (define-struct proc (parameters exp)) ;; if-exp (define-struct if-clause (predicate consequent alternative)) ;; app-exp (define-struct application (operator operands)) ;; name-exp (define-struct variable (name)) Die Menge der primitiven Operationen ist in der Syntax nicht festgelegt 38

39 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten S-Expressions vereinfachen den Parser Der Parser kann anhand des ersten Elements der Liste entscheiden, welchen AST-Datentyp er erzeugt. Andernfalls würde das Parsen erheblich komplexer. '((lambda (n) (if (= n 0) 1 (* n (- n 1))) 5) PARSER (make-application (make-proc (list n) (make-if-clause...)) (list 5) ) 39

40 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Abstrakte versus konkrete Syntax Die Datentypdefinitionen für die abstrakte Syntax abstrahieren von der konkreten Syntax des Programms: So sind Klammern, Kommentare usw. nicht repräsentiert. Daher der Name abstrakte Syntax Die konkrete Syntax zu dieser abstrakten Syntax könnte unterschiedlich aussehen, z.b. f(op1, op2) statt (f op1 op2) statt (+ 3 5) 40

41 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Von Programmtext zu AST... Typischerweise erhält der Parser eine Liste von Zeichen und nicht eine S-expression. [λn.if (n == 0) 1 : n * (n 1)] 5 Er muss daraus Tokens bilden und die abstrakte Syntax extrahieren à Eine Wissenschaft für sich, aber nicht Thema von GdI-1 41

42 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Von Programmtext zu AST... [λn.if (n == 0) 1 : n * (n 1)] 5 '((lambda (n) (if (= n 0) 1 (* n (- n 1))) 5) Diesen Schritt lassen wir außer Acht. PARSER (make-application (make-proc (list n) (make-if-clause...)) 5 ) 42

43 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Von Programmtext zu AST... [λn.if (n == 0) 1 : n * (n 1)] 5 Diesen Schritt lassen wir außer Acht. '((lambda (n) (if (= n 0) 1 (* n (- n 1))) 5) PARSER Racket s read Operation produziert die s-expression zu Programmen einer Sprache mit Racketähnlichen konkreten Syntax! (make-application (make-proc (list n) (make-if-clause...)) 5 ) 43

44 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Ein Parser in Racket ;; parse converts an s-expression into an exp structure ;; parse : s-expression -> exp (define (parse sexp) (cond [(number? sexp)???] [(string? sexp)???] [(boolean? sexp)???] [(symbol? sexp)???] [(cons? sexp)...])) 44

45 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Ein Parser in Racket ;; parse converts an s-expression into an exp structure ;; parse : s-expression -> exp (define (parse sexp) (cond [(number? sexp) sexp] [(string? sexp) sexp] [(boolean? sexp) sexp] [(symbol? sexp) (make-variable sexp)] [(cons? sexp)...])) 45

46 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Darstellung der Programme als Daten Ein Parser in Racket (define (parse sexp) (cond... [(cons? sexp) (local ((define op (first sexp))) (cond [(and (symbol? op) (symbol=? op 'lambda)) (make-proc (second sexp) (parse (third sexp)))] [(and (symbol? op) (symbol=? op 'if)) (make-if-clause (parse (second sexp)) (parse (third sexp)) (parse (fourth sexp)))] [(and (symbol? op) (symbol=? op 'define)) (make-definition (second sexp) (parse (third sexp)))] [else (make-application (parse (first sexp)) (map parse (rest sexp)))]))])) 46

47 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Ausführen von Programmen Ein Programm besteht aus einer Reihe von Definitionen und einer Reihe von Ausdrücken Zwei Operationen für die Auswertung Die Ausführung eines Programms wird von der Operation run-prog gesteuert: run-prog :: prog env -> (listof val) Die eval Operation: eval : exp env -> val Kann nur einzelne Ausdrücke auswerten, jedoch keine (define ) Anweisungen. 47

48 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Die Operation run-prog o Erstellt die Anfangsumgebung. o Erweitert Umgebung nach Auswertung einer (define ) Anweisung. o Für andere Ausdrücke werden die jeweiligen Ergebnisse berechnet (durch Aufruf von eval) und zu einer Ergebnisliste zusammengefügt. 48

49 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Die Operation run-prog ;; a program prog is a (listof exp) ;; run-prog :: prog env -> (listof val) (define (run-prog prog env) (cond [(empty? prog) empty] [else (local ((define exp (parse (first prog)))) (cond [(definition? exp) (...) [else (...)]) ] ) ) 49

50 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Ausführen von Programmen ;; a program prog is a (listof exp) ;; run-prog :: prog env -> (listof val) (define (run-prog prog env)... (cond [(definition? exp) (run-prog (rest prog) Erweitern der Umgebung (map-extend (definition-variable exp) (eval (definition-value exp) env) env))] [else (...)]))) 50

51 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Ausführen von Programmen ;; a program prog is a (listof exp) ;; run-prog :: prog env -> (listof val) (define (run-prog prog env)... (cond [(definition? exp) (run-prog (rest prog) (map-extend (definition-variable exp) (eval (definition-value exp) env) env))] [else Erweitern der Ergebnisliste (cons (eval exp env) (run-prog (rest prog) env)))]))) 51

52 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Primitive Operationen (define primitive-procedures (local ( (define names '(first rest cons list empty? empty * / - + < =)) (define procs (list first rest cons list empty? empty * / - + < =))) ) ) (map-create names (map make-primitive-procedure procs)) Racket s primitive Operationen werden in einer Hülle verpackt, die sie als primitive Operationen in unserer Sprache gekennzeichnet. 52

53 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Benutzung des Interpreters (define testprog '((define! (lambda (n) (if (= n 0) 1 (* n (! (- n 1)))))) (! 5))) (run-prog testprog primitive-procedures) Die gewünschten primitiven Operationen bilden die Anfangsumgebung 53

54 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Ausführen von Programmen Bemerkungen über Primitive Operationen Die Sprache kann leicht um neue primitive Operationen erweitert werden. Es besteht kein Zwang, eine primitive Operation durch die primitive Operation desselben Namens in der Basissprache zu implementieren. Wir können auch nicht-primitive Racket Operationen benutzen, die dann in der interpretierten Sprache primitiv sind. Wir könnten hier festlegen, dass das Symbol + in unserer Sprache Multiplikation bedeutet J 54

55 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Auswertung in einer Umgebung ;; Data type env: ;; An environment env is a (mapof val) ;; eval evaluates an expression exp in an environment env ;; eval : exp env -> val (define (eval exp env) ) (eval (make-application (make-variable '+) (list (make-variable 'x) 3)) env) à 8 env '+ (make-primitive-procedure +) 'x 5 55

56 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung (Selbstauswertende) Werte (define-struct primitive-procedure (the-proc)) ;; A value val is either ;; 1. a number ;; 2. a String ;; 3. a Boolean ;; 4. (make-proc params exp) ;; where params is a list-of-symbols and exp is an exp ;; 5. (make-primitive-procedure p) ;; where p is a Racket procedure ;; all values are self-evaluating ;; self-evaluating :: exp -> boolean (define (self-evaluating? exp) (cond [(number? exp) true] [(string? exp) true] [(boolean? exp) true] procedures are selfevaluating!! [(proc? exp) true] [(primitive-procedure? exp) true] [else false])) 56

57 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Grundstruktur der Auswertungsfunktion (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (eval-var exp env)] [(if-clause? exp) (eval-if exp env)] [(application? exp) (eval-app (eval (application-operator exp) env) (map (lambda (expr) (eval expr env)) (application-operands exp)) env)] Weiterleitung an Spezialprozeduren für jeden Ausdruckstyp [else (error 'eval (format "Unknown expression type: ~v" exp))])) 57

58 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von Variablen: eval-var ;; evaluates a variable ;; by looking it up in the environment ;; ;; eval-var :: exp env -> val ;; (define (eval-var exp env) (local ((define val (map-lookup (variable-name exp) env))) (if (empty? val) (error 'eval-var (format "Unbound variable: ~v" (variable-name exp))) val))) 58

59 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von if Ausdrücken: eval-if ;; eval-if : exp env -> val (define (eval-if exp env) (if (eval (if-clause-predicate exp) env) (eval (if-clause-consequent exp) env) (eval (if-clause-alternative exp) env))) 59

60 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von Operationsaufrufen: eval-app ;; eval-app: val (listof exp) env -> val (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure) (... )] [(proc? procedure) (...)] [else (error 'eval-app (format "Procedure expected, found: ~v procedure))])) 60

61 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von primitiven Operationen ;; eval-app: val (listof exp) env -> val (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure) (apply (primitive-procedure-the-proc procedure) arguments)] [(proc? procedure)... ] [else (error 'eval-app... )])) 61

62 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von primitiven Operationen apply ist eine primitive Operation, mit der die Parameter einer Operation als Liste übergeben werden können (apply + (list 1 2 3)) à ( ) (apply f (list a b)) à (f a b) Wir brauchen apply, weil wir nicht wissen, wie viele Argumente die primitive Prozedur benötigt 62

63 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Auswertung von definierten Operationen ;; eval-app: val (listof exp) env -> val (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure)...] [(proc? procedure) (eval vgl. Auswertungsregel (subst für selbst-definierte (map-create Operationen (proc-parameters procedure) arguments) (proc-exp procedure)) env)] [else (error 'eval-app... )])) 63

64 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Substitution ;; subst substitutes all occurrences of names in exp ;; that are associated with a value in a-map with ;; that value, according to the lexical scoping rules ;; subst : (mapof val) exp -> exp (define (subst a-map exp) ) Substitution wird als rekursive Funktion über Ausdrücken definiert. Fallunterscheidung je nach Typ des Ausdrucks, wie bei eval Die zu ersetzenden Namen und Werte werden in einer map übergeben 64

65 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Variablen und selbst-auswertende Ausdrücke (define (subst a-map exp) (cond [(self-evaluating? exp) exp] [(variable? exp) (local ((define newval (map-lookup (variable-name exp) a-map))) (if (empty? newval) exp newval))] ))... Variable wird ersetzt, falls entsprechender Eintrag in Substitutionstabelle existiert 65

66 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Substitution innerhalb von Prozeduren (define (subst a-map exp) (cond... [(proc? exp) (make-proc (proc-parameters exp) (subst Lokal mit lambda gebundene Namen überdecken äußere Bindungen. (map-remove-all (proc-parameters exp) a-map) (proc-exp exp)))] ))... (define (op1 x y) (local ((define op2 (x) (... x...))) (op2... x... y) )... (op1 5) 66

67 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Auswertung in einer Umgebung Substitution: if-clause?, application? (define (subst a-map exp) (cond... [(if-clause? exp) (make-if-clause (subst a-map (if-clause-predicate exp)) Ersetze in den Unterausdrücken (subst a-map (if-clause-consequent exp)) (subst a-map (if-clause-alternative exp)))] [(application? exp) (make-application (subst a-map (application-operator exp)) (map (lambda (op) (subst a-map op)) (application-operands exp)))] [else (error 'subst "Unknown expression type: ~v)])) 67

68 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket Interpreter als universelle Maschinen 68

69 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Die factorial Maschine (define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n))) 1 1 = 720 *! - 1 factorial Wir können factorial als Beschreibung einer Maschine verstehen, die Teile zum subtrahieren, multiplizieren und testen auf Gleichheit enthält. 69

70 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Die factorial Maschine (define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n))) 1 1 = factorial *! Darüber hinaus enthält sie einen Kippschalter und eine andere factorial Maschine. 1 Die factorial Maschine ist unendlich, da sie eine andere factorial Maschine enthält. 70

71 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Interpreter als universelle Maschine Analog können wir einen Interpreter als eine sehr spezielle Maschine ansehen, die als Eingabe die Beschreibung einer anderen Maschine erwartet. Über diese Eingabe konfiguriert sich der Interpreter selbst, so dass er die in der Eingabe beschriebene Maschine nachbildet. Beispiel: wenn wir dem Interpreter die Definition von factorial übergeben, kann er Fakultäten berechnen. 6 eval 720 (define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n))) 71

72 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Interpreter als universelle Maschine Unser Interpreter kann als universelle Maschine betrachtet werden. Er imitiert andere Maschinen, wenn sie als Programme beschrieben sind. 72

73 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Interpreter als universelle Maschine Stellen Sie sich einen analogen Interpreter für elektrische Schaltkreise vor... ein Schaltkreis, der als Signal die Pläne für andere Schaltkreise empfängt, z.b. ein Filter. Basierend auf diesem Input verhält sich der Schaltkreis wie ein Filter. So ein universeller elektrischer Schaltkreis ist so komplex, dass er kaum vorstellbar ist. Dagegen ist es überraschend, wie einfach der Code des Programm-Interpreters ist. 73

74 Thema 8: Interpreter-basierte Semantik: Meta-Interpreter für ein Teil von Racket - Programme als spezielle Maschinen Programme als Daten Der Interpreter ist eine Brücke zwischen Datenobjekten, die von der Programmiersprache manipuliert werden, und der Programmiersprache selbst. Aus dem Blickwinkel des Nutzers ist die Eingabe (* x x) ein Ausdruck in der Programmiersprache, den der Interpreter ausführen soll. Aus dem Blickwinkel des Interpreter-Programms ist der Ausdruck nur eine Liste von Symbolen, *, x, und x, die nach festgelegten Regeln manipuliert werden sollen. 74

75 Thema 8: Interpreter-basierte Semantik 8.4 Normale Auswertungsreihenfolge 75

76 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Applikative vs. Normale Auswertung Zur Erinnerung... aus T1 Applikative Auswertung: Erst Operator und alle Operanden auswerten, dann substituieren. Normale Auswertung: Operator auswerten, dann die (nicht ausgewerteten) Operanden für die formalen Argumente des Operators substituieren. Operanden werden nur bei primitiven Operationen ausgewertet. 76

77 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Applikative vs. Normale Auswertung In T1 haben wir das Substitutionsmodell und Beispiele verwendet, um intuitiv den Unterschied zwischen den beiden Auswertungsstrategien zu erklären. Wissen Sie noch, wie sich die Strategien unterscheiden? 77

78 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Applikative vs. normale Auswertung Wenn sie einen Wert berechnen, dann liefern beide Strategien die gleichen Werte. Wichtige Voraussetzung: Das Ergebnis hängt nicht von der Auswertungsreihenfolge ab (Konfluenz). Es gibt Sprachelemente (Zuweisungen, Ein-/ Ausgabe), die diese Eigenschaft zerstören. 78

79 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Applikative vs. normale Auswertung Die beiden Strategien können sich erheblich in der Anzahl der benötigten Schritte unterscheiden. In zwei Fällen: Argument wird nicht benötigt Argument wird mehrfach benötigt 79

80 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Applikative vs. normale Auswertung Argument wird nicht benötigt à normale Auswertung besser benötigt weniger Schritte/bessere Terminierungseigenschaften. (define (area-of-disk r d) (* 3.14 r r)) (area-of-disk 5 (* 5 2)) Argument wird mehrfach benötigt à applikative Auswertung besser benötigt weniger Schritte. (define (square x) (* x x)) (square (+ 3 4)) 80

81 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge Normale Auswertung im Interpreter Mit Hilfe des Interpreters können wir sehr präzise erklären, was normale Auswertungsreihenfolge ist wie sie sich von applikativer Reihenfolge unterscheidet 81

82 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter Auswertung in jetzigen eval ist??? (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (eval-var exp env)] [(if-clause? exp) (eval-if exp env)] Welche Auswertungsstrategie haben wir implementiert? [(application? exp) (eval-app (eval (application-operator exp) env) (map (lambda (expr) (eval expr env)) (application-operands exp)) env)] applikative Auswertung [else (error 'eval (format "Unknown expression type: ~v" exp))])) 82

83 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter eval bei applikativer Reihenfolge (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (eval-var exp env)] [(if-clause? exp) (eval-if exp env)] [(application? exp) (eval-app (eval (application-operator exp) env) (map (lambda (expr) (eval expr env)) (application-operands exp)) env)] Was ändert sich hier bei einer normalen Auswertungsstrategie? [else (error 'eval (format "Unknown expression type: ~v" exp))])) 83

84 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter eval bei normaler Auswertung (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (eval-var exp env)] [(if-clause? exp) (eval-if exp env)] Argumente werden nicht evaluiert... [(application? exp) (eval-app (eval (application-operator exp) env) (application-operands exp) env)] [else (error 'eval (format "Unknown expression type: ~a" exp))])) 84

85 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter eval-app bei applikativer Auswertung (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure) (apply (primitive-procedure-the-proc procedure) arguments )] [(proc? procedure)... ] [else... ])) Argumente sind bereits evaluiert (in Werte reduziert)... 85

86 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter eval-app bei normaler Auswertung (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure) (apply (primitive-procedure-the-proc procedure) (map (lambda (expr) (eval expr env)) arguments) )] [(proc? procedure)... ] [else... ])) Hier wird erst evaluiert, da die Auswertung sonst nicht weitergeführt werden kann. 86

87 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter eval-app bei normaler Auswertung ;; eval-app: val (listof exp) env -> val (define (eval-app procedure arguments env) (cond [(primitive-procedure? procedure)...] [(proc? procedure) arguments ist eine Liste von (eval noch nicht ausgewerteten (subst Ausdrücken. In applikativer (map-create Auswertung sind sie Werte. (proc-parameters procedure) arguments) (proc-exp procedure)) env)] [else (error 'eval-app... )])) 87

88 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter Substitution: Notiz Die Substitutionsprozedur enthält einen Fehler, wir können sie nicht unverändert für die normale Auswertung verwenden. Um welchen Fehler geht es? 88

89 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter Substitution: Notiz Was ist das Ergebnis dieses Programms? (define testprog3 '( ( ((lambda (z x) (lambda (z) (+ z x))) 5 (+ 2 z)) 10) ) ) 89

90 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter Substitution: Notiz ( ) ((lambda (z x) (lambda (z) (+ z x))) 5 (+ 2 z)) 10 ( ) (lambda (z) (+ z (+ 2 z))) 10 90

91 Thema 8: Interpreter-basierte Semantik: Normale Auswertungsreihenfolge - Normale Auswertung im Interpreter Substitution: Notiz Fehler: Wenn der Ausdruck, der eingesetzt wird, eine freie Variable enthält, kann diese durch die Substitution fälschlicherweise gebunden werden. Basisidee für eine Lösung: Vor der Substitution in einem lambda-ausdruck wird geprüft, ob einer der Parameternamen frei in einem der Ausdrücke in der Substitutionstabelle vorkommt Falls ja, wird der Parameter umbenannt 91

92 Thema 8: Interpreter-basierte Semantik 8.5 Zusammenfassung 92

93 Thema 8: Interpreter-basierte Semantik: Zusammenfassung Syntax Syntax = Vokabular und Grammatik Formale Notationen zur Festlegung der Syntax Konkrete versus Abstrakte Syntax. Abstrakte Syntax abstrahiert über bestimmte Details, wie die Begrenzungszeichen oder konkrete Schlüsselworte. Parsen liest die Zeichenkette des Programms und produziert den AST anhand der konkreten und abstrakten Syntax-Definition. 93

94 Thema 8: Interpreter-basierte Semantik: Zusammenfassung Semantik Verschiedene Formen der Semantikdefinition: Interpreter-basierte Denotationelle Semantik,... 94

95 Thema 8: Interpreter-basierte Semantik: Zusammenfassung Semantik In dem wir einen Interpreter schreiben erklären wir der Maschine die Bedeutung der Sprache und verstehen sie auch selbst besser. Jedes Programm kann als ein Interpreter für eine spezielle Domäne betrachtet werden. Basissprache versus interpretierte Sprache. Metazirkulärer Interpreter: Beide Sprachen sind gleich. 95

96 Thema 8: Interpreter-basierte Semantik: Zusammenfassung Meta-zirkulärer Interpreter für Mini-Racket Strukturen für die Darstellung der abstrakten Syntax. Programm als ein s-expresion (verschachtelte) Listen von Symbolen. Auswertung in einer Umgebung, wo Namen-Werte Bindung verwaltet werden. Anfangsumgebung: Bindungen von Namen für primitive Operationen an den entsprechenden Racket Operationen. Interpretation als Substitution von Namen mit entsprechenden Werten. 96

Ausarbeitung des Interpreter Referats

Ausarbeitung 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

1 Syntax von Programmiersprachen

1 Syntax von Programmiersprachen 1 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ): formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmier-Sprache Festlegung, wie Programme

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil IVb WS 2012/2013 λ-kalkül-parser Hilfsfunktionen: Die break-funktion ist eine Funktion höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet.

Mehr

Die Programmiersprache Scheme... DrRacket: Die Programmierumgebung http://www.racket-lang.org/ Sprache: Semantik. Sprache: Syntax

Die Programmiersprache Scheme... DrRacket: Die Programmierumgebung http://www.racket-lang.org/ Sprache: Semantik. Sprache: Syntax Informatik I 21. Oktober 2010 2. Informatik I 2. Jan-Georg Smaus 2.1 2.2 Albert-Ludwigs-Universität Freiburg 21. Oktober 2010 Jan-Georg Smaus (Universität Freiburg) Informatik I 21. Oktober 2010 1 / 40

Mehr

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at

Einfache 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

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was sind Operatoren? Ein Operator ist eine in die Programmiersprache eingebaute Funktion,

Mehr

Proseminar Funktionales Programmieren. Stephan Kreutzer

Proseminar Funktionales Programmieren. Stephan Kreutzer Proseminar Funktionales Programmieren Die Programmiersprache LISP Stephan Kreutzer Teil I: Funktionales Programmieren Imperative Sprachen Imperative Sprachen: Befehlsorientiert Imperative Sprachen orientieren

Mehr

Grundprinzipien der funktionalen Programmierung

Grundprinzipien der funktionalen Programmierung Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur

Mehr

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:

Mehr

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 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

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014 Definition von domänenspezifischen Sprachen mit Xtext: Einführung 19. November 2014 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen Entwicklung definieren wollen? Anforderungserfassung

Mehr

Kapitel 3 Programmierung Lernen mit Scheme. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Kapitel 3 Programmierung Lernen mit Scheme. Xiaoyi Jiang Informatik I Grundlagen der Programmierung Kapitel 3 Programmierung Lernen mit Scheme 1 3.1 Wie lehrt man Programmierung? Klassischer Ansatz: Es wird die Syntax einer (modischen) Programmiersprache beigebracht Es wird eine komplexe, kommerzielle

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Was ist ein Compiler?

Was ist ein Compiler? Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?

Mehr

Prinzipielle Ausführungsvarianten I

Prinzipielle Ausführungsvarianten I Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Unser erstes Java Programm AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 39 Hello World!

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Kontrollstrukturen, Pseudocode und Modulo-Rechnung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1

Mehr

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit

Mehr

Konsequent agile Entwicklung mit funk4onaler Programmierung. Michael Sperber

Konsequent agile Entwicklung mit funk4onaler Programmierung. Michael Sperber Konsequent agile Entwicklung mit funk4onaler Programmierung Michael Sperber Individualso4ware branchenunabhängig Scala, Clojure, Erlang, Haskell, F# Schulungen, Coaching www.acave- group.de funkaonale-

Mehr

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

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12) Hinweis: Dieses Übungsblatt enthält

Mehr

Grundlagen und Basisalgorithmus

Grundlagen und Basisalgorithmus Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

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

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

1. Zeilenendkommentare: //... 2. geklammerte Kommentare: /*... */ 3. Dokumentationskommentare: /**... */

1. Zeilenendkommentare: //... 2. geklammerte Kommentare: /*... */ 3. Dokumentationskommentare: /**... */ 1 Kommentare im Source-Code Kommentare werden im Source-Code überlesen und wirken wie "white Space" (Leerzeichen, Tabulator, Zeilenvorschub). Mit Ausnahme des @deprecated-tag in Dokumentationskommentaren

Mehr

3 Variablen. 3.1 Allgemeines. 3.2 Definition und Verwendung von Variablen

3 Variablen. 3.1 Allgemeines. 3.2 Definition und Verwendung von Variablen 3 Variablen 3.1 Allgemeines Variablen werden in Prozeduren, Mustern und Parameter-Dokumenten definiert und verwendet und bei der Jobgenerierung durch die Werte, die ihnen zugewiesen werden, ersetzt. Variablen

Mehr

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

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe... php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.

Mehr

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

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Einführung Sprachmittel Sommer 2011, 20. Juni 2011,

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

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

Jürgen Bayer. Anonyme Methoden, Lambda-Ausdrücke und Ausdrucksbäume in.net Jürgen Bayer Anonyme Methoden, Lambda-Ausdrücke und Ausdrucksbäume in.net Inhaltsverzeichnis 1 Einleitung 1 2 Anonyme Methoden 2 3 Lambda-Ausdrücke 4 4 Ausdrucksbäume 6 4.1 Was sind Ausdrucksbäume? 6 4.2

Mehr

Programmierparadigmen

Programmierparadigmen Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 20. Juni 2011, c 2011 D.Rösner D. Rösner PGP 2011...

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

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

Algorithmen und Programmierung

Algorithmen 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

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Funktionale Programmierung

Funktionale Programmierung Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein

Mehr

ARBEITSBLATT ZU FORMALEN SPRACHEN

ARBEITSBLATT ZU FORMALEN SPRACHEN ARBEITSBLATT ZU FORMALEN SPRACHEN Aufgabe 1: Gegeben ist die folgende Formale Sprache L(G) mit G = (T, N, P, S). Die Produktionen lauten ZUWEISUNG ::= name zuweisungsoperator AUSDRUCK semikolon AUSDRUCK

Mehr

Grammatiken. Einführung

Grammatiken. Einführung Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische

Mehr

Lua - Erste Schritte in der Programmierung

Lua - Erste Schritte in der Programmierung Lua - Erste Schritte in der Programmierung Knut Lickert 7. März 2007 Dieser Text zeigt einige einfache Lua-Anweisungen und welchen Effekt sie haben. Weitere Informationen oder eine aktuelle Version dieses

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen

Mehr

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

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff Programmieren in C C Syntax Datentypen, Operatoren und Kontrollstrukturen Prof. Dr. Nikolaus Wulff Elementare Typen Imperative und objektorientierte Programmiersprachen bieten i.d.r. einen Satz elementarer

Mehr

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo Aufgabe ist die Entwicklung einer vereinfachten Variante der beliebten Programmiersprache Logo. Die Aufgabe ist in drei Stufen zu erledigen, von der wir zunächst nur die erste Stufe bekannt geben. Die

Mehr

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet

Mehr

Prinzipien der Softwareentwicklung S. Strahringer

Prinzipien der Softwareentwicklung S. Strahringer Gliederung 1 Einführung Was ist ein Programm? Vorteile (und Nachteile) von PHP Erste PHP-Programme Ausführung von PHP-Programmen 2 Grundbegriffe der Programmierung Anweisungen, Variablen, Datentypen und

Mehr

Tag 9: Datenstrukturen

Tag 9: Datenstrukturen Tag 9: Datenstrukturen A) Datenstrukturen B) Cell Arrays C) Anwendungsbeispiel: Stimulation in einem psychophysikalischen Experiment A) Datenstrukturen Wenn man komplizierte Datenmengen verwalten möchte,

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum Inhalte der Vorlesung 6. Syntaxgesteuerte Übersetzung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc

Mehr

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

Seminar Scala SS2010, Einführung. R. Schiedermeier Fakultät 07 für Informatik und Mathematik Seminar Scala SS2010, Einführung R. Schiedermeier Fakultät 07 für Informatik und Mathematik Themen Ausführen von Scala-Code Werte und Variablen Methoden Typen 22.04.10 Seminar Scala, Einführung 2 Übersetzen

Mehr

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12 EINI WiMa/LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe

Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe Anfragen für Listen Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe 1 MapReduce-Verfahren Google u.a. verwenden Map-Reduce-Verfahren zur Verarbeitung riesiger

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Fachseminar WS 2008/09

Fachseminar WS 2008/09 Fachseminar WS 2008/09 Fachgebiet: Compilerbau Thema: Lexikalische Analyse (Scanner) Referent: Ali Sediq Betreuer: Prof. Dr. Helmut Weber 1 Inhaltsverzeichnis Lexikalische Analyse 1.0 Grundprobleme der

Mehr

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

Was 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

Mehr

Programmierung in Python

Programmierung 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

Mehr

C-Vorrangregeln. Version 1.3 6.7.2009. email: tb@ostc.de Web: www.ostc.de

C-Vorrangregeln. Version 1.3 6.7.2009. email: tb@ostc.de Web: www.ostc.de C-Vorrangregeln Version 1.3 6.7.2009 email: tb@ostc.de Web: www.ostc.de Die Informationen in diesem Skript wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen

Mehr

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen

Formale 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

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

2. Vorlesung. Slide 40

2. Vorlesung. Slide 40 2. Vorlesung Slide 40 Knobelaufgabe Was tut dieses Programm? Informell Formal Wie stellt man dies sicher? knobel(a,b) { Wenn a = 0 dann return b sonst { solange b 0 wenn a > b dann { a := a - b sonst b

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Einführung in die Theoretische Informatik Woche 10 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 Zusammenfassung Zusammenfassung der letzten LV Satz Sei G = (V, Σ, R, S) eine kontextfreie

Mehr

Buch-Add-Ons. Jürgen Bayer. Object Pascal-Tipps und Tricks. 1 Konvertieren und auf numerische Werte überprüfen 2

Buch-Add-Ons. Jürgen Bayer. Object Pascal-Tipps und Tricks. 1 Konvertieren und auf numerische Werte überprüfen 2 Buch-Add-Ons Jürgen Bayer Inhaltsverzeichnis Object Pascal-Tipps und Tricks 1 Konvertieren und auf numerische Werte überprüfen 2 1.1 Strings in Integerwerte konvertieren 2 1.2 Strings in Extended-Werte

Mehr

SWE1 / Übung 2 (19.10.2011)

SWE1 / Übung 2 (19.10.2011) SWE1 / Übung 2 (19.1.211) Simulation von Algorithmen Testen, Testplan Beispiel arithmetische Ausdrücke Handsimulation von Algorithmen Man versteht einen Algorithmus (insbesonders einen "Fremden"), wenn

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 8: kontextfreie Grammatiken Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2009/2010 1/37 Überblick Kontextfreie Grammatiken

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL.

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL. 2 Grundlagen von PL/SQL Grundelemente von PL/SQL. 2.1 Übersicht Themen des Kapitels Grundlagen von PL/SQL Themen des Kapitels PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren Im Kapitel Grundlagen

Mehr

Compiler. Kapitel. Syntaktische Analyse. Kapitel 4. Folie: 1. Syntaktische Analyse. Autor: Aho et al.

Compiler. Kapitel. Syntaktische Analyse. Kapitel 4. Folie: 1. Syntaktische Analyse. Autor: Aho et al. Folie: 1 Kapitel 4 Übersicht Übersicht Syntax: Definition 4 syn-tax: the way in which words are put together to form phrases, clauses, or sentences. Webster's Dictionary Die Syntax (griechisch σύνταξις

Mehr

7. Formale Sprachen und Grammatiken

7. Formale Sprachen und Grammatiken 7. Formale Sprachen und Grammatiken Computer verwenden zur Verarbeitung von Daten und Informationen künstliche, formale Sprachen (Maschinenspr., Assemblerspachen, Programmierspr., Datenbankspr., Wissensrepräsentationsspr.,...)

Mehr

Sprachbeschreibung und Erweiterung

Sprachbeschreibung und Erweiterung Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen

Mehr

Entwicklung eines korrekten Übersetzers

Entwicklung eines korrekten Übersetzers Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Klausur Formale Systeme Fakultät für Informatik WS 2009/2010

Klausur Formale Systeme Fakultät für Informatik WS 2009/2010 Klausur Formale Systeme Fakultät für Informatik WS 2009/2010 Prof. Dr. Bernhard Beckert 18. Februar 2010 Name: Mustermann Vorname: Peter Matrikel-Nr.: 0000000 Klausur-ID: 0000 A1 (15) A2 (10) A3 (10) A4

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie und, oder, nicht, wenn... dann zwischen atomaren und komplexen Sätzen. I. Aussagenlogik 2.1 Syntax Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen. Sätze selbst sind entweder wahr oder falsch. Ansonsten

Mehr

Formale Sprachen, reguläre und kontextfreie Grammatiken

Formale Sprachen, reguläre und kontextfreie Grammatiken Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache

Mehr

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich 13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm 1 Vom Problem zum Programm Ein Problem besteht darin, aus einer gegebenen Menge von Informationen eine weitere (bisher unbekannte) Information zu bestimmen. 1 Vom Problem zum Programm Ein Algorithmus ist

Mehr

2 Einfache Rechnungen

2 Einfache Rechnungen 2 Einfache Rechnungen 2.1 Zahlen Computer, auch bekannt als Rechner, sind sinnvoller eingesetzt, wenn sie nicht nur feste Texte ausgeben, sondern eben auch rechnen. Um das Rechnen mit Zahlen zu verstehen,

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

Informationsverarbeitung im Bauwesen

Informationsverarbeitung im Bauwesen 4 Informationsverarbeitung im Bauwesen Markus Uhlmann basierend auf Folien von A. Brugger 1 Zusammenfassung der 3. Vorlesung Einführung in Excel/VBA Einführung in die Tabellenkalkulation Erste Schritte

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

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

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B. C-Crash-Kurs Eine kurze, keinesfalls erschöpfende Einführung in die Sprache C für Studierende, die eine strukturierte imperative Programmiersprache beherrschen. Die Vorstellung erfolgt am Beispiel von

Mehr

Szenario 3: Service mit erweiterter Schnittstelle

Szenario 3: Service mit erweiterter Schnittstelle 2. Hintergrundverarbeitung in Android: Services und Notifications Szenarien für lokale Services Szenario 3: Service mit erweiterter Schnittstelle Ein Service bietet zusätzliche Methoden an, über die sich

Mehr

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Python Programmieren. Variablen, Ausdrücke und Anweisungen Python Programmieren Funktionen Module und Namensräume Datentypen in Python Was noch zu sagen bleibt... richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Variablen Variablennamen und

Mehr

Arrays und Methoden. Programmiervorkurs WS 2010 / 11

Arrays und Methoden. Programmiervorkurs WS 2010 / 11 Arrays und Methoden Programmiervorkurs WS 2010 / 11 Einleitung Bisher sind einfach Programme möglich Nun wollen wir Organisation und Stil verbessern Gesamter Code sollte nicht an einer Stelle stehen Nicht

Mehr

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i

Mehr

IT-Zertifikat: Allgemeine Informationstechnologien II PHP

IT-Zertifikat: Allgemeine Informationstechnologien II PHP IT-Zertifikat: Allgemeine Informationstechnologien II PHP PHP ( PHP: Hypertext Preprocessor ) ist eine serverseitige Skriptsprache: Der PHP-Code wird nicht wie bei JavaScript auf dem Clientrechner ausgeführt,

Mehr

Funktionale Programmierung mit Haskell

Funktionale 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 2011 I. Die

Mehr

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

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Grundstrukturen: Sub [name]([übergabe]) End Sub [Übergabe] ist

Mehr

3. Grundregeln für die Java-Programmierung

3. Grundregeln für die Java-Programmierung 3. Grundregeln für die Java-Programmierung Sprachaufbau von Java Programmen Stilistische Konventionen JavaDoc Allgemeine Informatik 2 SS09 Folie 2.1 Allgemeine Vorbemerkung Bei Programmiersprachen sind

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54 PHP 5.4 Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012 Grundlagen zur Erstellung dynamischer Webseiten ISBN 978-3-86249-327-2 GPHP54 5 PHP 5.4 - Grundlagen zur Erstellung dynamischer Webseiten

Mehr