Grundlagen der Informatik I
|
|
- Bernd Krämer
- vor 6 Jahren
- Abrufe
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 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
Mehr1 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
MehrFunktionale 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.
MehrDie 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
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
MehrJava 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
MehrPraktikum 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
MehrDer 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.
MehrProgrammiertechnik 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,
MehrProseminar Funktionales Programmieren. Stephan Kreutzer
Proseminar Funktionales Programmieren Die Programmiersprache LISP Stephan Kreutzer Teil I: Funktionales Programmieren Imperative Sprachen Imperative Sprachen: Befehlsorientiert Imperative Sprachen orientieren
MehrGrundprinzipien 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
MehrEinfü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
MehrProgrammierung 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:
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
MehrJava 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
MehrDefinition 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
MehrKapitel 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
MehrErwin 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:
Mehr1. 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
MehrWas 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?
MehrPrinzipielle 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!
MehrProbeklausur: 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,
MehrKontrollstrukturen, 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
MehrBrainfuck. 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
MehrKonsequent 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-
MehrProgrammierung 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
MehrGrundlagen 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
MehrEinfü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)
MehrJava 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
Mehr1. 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
Mehr3 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
Mehrphp 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.
MehrGliederung. 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,
MehrVererbung & 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
MehrJü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
MehrProgrammierparadigmen
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...
Mehr5.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
MehrEntwurf 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
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
MehrPIWIN 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:
MehrFunktionale 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
MehrARBEITSBLATT 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
MehrGrammatiken. 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
MehrLua - 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
MehrEinfü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
MehrProgrammieren 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
Mehr1. 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
MehrProgrammieren 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
MehrPrinzipien 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
MehrTag 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,
MehrPIWIN 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
MehrInhalte 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
MehrSeminar 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
MehrEINI 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
MehrJava 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
MehrKapitel 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 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
MehrFachseminar 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
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
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
MehrC-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
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
MehrÜ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
Mehr2. 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
MehrJava 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
MehrEinfü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
MehrBuch-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
MehrSWE1 / Ü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
MehrGrundbegriffe 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
MehrProgrammiersprachen 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
MehrObjektorientierte 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
MehrThemen 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
MehrCompiler. 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 σύνταξις
Mehr7. 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.,...)
MehrSprachbeschreibung 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
MehrEntwicklung eines korrekten Übersetzers
Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung
MehrEinfü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:
MehrKlausur 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
MehrGrundlagen 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.
MehrI. 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
MehrFormale 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
Mehr13 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,
Mehr1 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
Mehr2 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,
MehrGliederung. 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.
MehrInformationsverarbeitung 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
MehrProgrammieren. 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
MehrHello 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
MehrC 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
MehrSzenario 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
MehrPython 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
MehrArrays 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
MehrKurs 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
MehrIT-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,
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 2011 I. Die
MehrVisual 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
Mehr3. 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
MehrKlassendefinitionen verstehen
Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen
MehrErwin 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
MehrPHP 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