Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Save this PDF as:
 WORD  PNG  TXT  JPG

Größe: px
Ab Seite anzeigen:

Download "Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen"

Transkript

1 Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009

2 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

3 Die Sprache LFP +C Überblick Die Sprache LFP +C Ausdrücke Expr ::=Var Int True False [] (Expr 1 :Expr 2 ) (Expr 1,Expr 2 ) (\Var -> Expr ) (Expr 1 Expr 2 ) (case Expr of {Alt 1... Alt n }) (letrec Var 1 = Expr 1,..., Var n = Expr n in Expr n+1 ) (seq Expr 1 Expr 2 ) (amb Expr 1 Expr 2 ) (por Expr 1 Expr 2 ) (Expr 1 + Expr 2 ) (Expr 1 - Expr 2 ) (Expr 1 * Expr 2 ) (null? Expr ) case-alternativen und Pattern Alt ::=Pat -> Expr Pat ::=True False [] (Var 1 :Var 2 ) (Var 1,Var 2 ) Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

4 Überblick Ziel Überführe Quelltext in Tokenstrom Token = Eine syntaktische Einheit Dabei: Fasse syntaktische Einheiten wie Zahlen, Variablennamen, Schlüsselworter zusammen Entferne Whitespaces, \n, \r, \t Generiere Fehlermeldung bei unbekannter Syntax Es trat ein Fehler auf. hilft nicht. Besser: Warum und wo tritt der Fehler auf? Deshalb: Beim Lexen die Zeilen und Spalten-Information für die Token mitführen. Fehlermeldung gibt das unbekannte Zeichen aus Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

5 Überblick Der Datentyp LFPCTok > type CodeMark = (Int,Int) -- (Row, Column) > data LFPCTok = TokInt CodeMark Integer -- Ganzzahl > TokVar CodeMark Var -- Variable > TokTrue CodeMark -- True > TokFalse CodeMark -- False > TokNil CodeMark -- [] > TokCons CodeMark -- : > TokPlus CodeMark -- + > TokMinus CodeMark -- - > TokMult CodeMark -- * > TokIsNull CodeMark -- null? > TokLet CodeMark -- letrec > TokIn CodeMark -- in > TokCase CodeMark -- case > TokOf CodeMark -- of > TokComma CodeMark --, > TokCBOpen CodeMark -- { > TokCBClose CodeMark -- } > TokArrow CodeMark -- -> > TokLam CodeMark -- \ > TokBOpen CodeMark -- ( > TokBClose CodeMark -- ) > TokEq CodeMark -- = > TokSeq CodeMark -- seq > TokAmb CodeMark -- amb > TokPor CodeMark -- por Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

6 Überblick Anmerkungen zum Lexer Minuszeichen könnte als [TokInt (1,1) 20, TokInt (1,4) -10] oder als [TokInt (1,1) 20, TokMinus (1,4), TokInt (1,5) 10] erkannt werden. Konvention: Das Minus wird nur dann als negative Zahl erkannt, wenn direkt nach dem Zeichen eine Ziffer folgt, sonst wird es stets als Operator erkannt. Beachte: ergibt [TokInt (1,1) 20, TokInt (1,4) -10] Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

7 Aufgabe 1 Überblick Implementieren Sie die folgenden Funktionen im Modul LFPC.Parse.Lex getcodemark :: LFPCTok -> CodeMark, die die Positionsmarkierung eines Tokens zurück gibt. printlfpctok :: LFPCTok -> String, die ein Token in den ursprünglichen Quelltext des Tokens konvertiert. lexlfpc :: String -> [LFPCTok], die aus einem LFP +C -Quelltext eine Liste von Token erstellt und dabei Kommentare entfernt und für jedes Token dessen Position im Quelltext (Zeile, Spalte) mit abspeichert. Sollte ein Fehler bei der lexikalischen Analyse auftreten, so generieren Sie mit der error-funktion eine Fehlermeldung, die zumindest die Zeile und Spalte des nicht lexbaren Symbols und das Symbol selbst ausgibt. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

8 Überblick Interne Darstellung Datentyp CoreLFPC data CoreLFPC = V CoreVar -- Variable App CoreLFPC CoreLFPC -- Applikation Lambda CoreVar CoreLFPC -- Abstraktion Let [Bind] CoreLFPC -- Letrec-Ausdruck Cons Int Int [CoreLFPC] -- Konstruktoranw. Case CoreLFPC [Alt] -- Case-Ausdruck Seq CoreLFPC CoreLFPC -- Seq-Ausdruck Amb CoreLFPC CoreLFPC -- Amb-Ausdruck Por CoreLFPC CoreLFPC -- Por-Ausdruck deriving (Eq,Show) data Alt = Alt Int Int [CoreVar] CoreLFPC deriving (Eq,Show) data Bind = CoreVar :=: CoreLFPC deriving (Eq,Show) type CoreVar = (CodeMark,Bool,Var,Var) Besonderheiten Einheitliche Darstellung der Konstruktoren mittels Cons i j argumente: i: Nummer des Konstruktors j: Stelligkeit Darstellung der case-alternativen analog Alt i j patternvars rhs Keine Konstrukte für Zahlen und +, -, *, null? Case-Alternativen für jeden Konstruktor Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

9 Überblick Aufgabe des Parsers Ziel Überführe Tokenstrom ([LFPCTok]) in Syntaxbaum (CoreLFPC) Syntax von CoreLFPC abstrakt Expr ::= Var (Expr 1 Expr 2 ) \Var -> Expr c i,k Expr 1... Expr k letrec Var 1 = Expr 1,... Var n = Expr n in Expr case Expr of { Pat 1 -> Expr 1,..., Pat n -> Expr n } seq Expr 1 Expr 2 amb Expr 1 Expr 2 por Expr 1 Expr 2 Pat ::= c i,k Var 1... Var k Erfordert (Parsen) Testen einiger nicht kontextfreier Eigenschaften Erstellen des CoreLFPC-Ausdrucks Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

10 Überblick Parsergenerator happy Automatisches Geniereren eines Shift-Reduce Parsers anhand einer kontextfreien Grammatik und Assoziativitäten und Präzedenzen Erwartet Tokendatentyp und Ausgabedatentyp Aufruf happy Parserbeschreibung Dateiendung der Parserbeschreibung:.y bzw..ly (für Haskell-Literate-Quellcode) Parser.ly schon zu einem großen Teil vorgegeben. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

11 Syntax im Parser Überblick Anders als vorher um Klammern zu sparen CExpr ::= letrec Binds in CExpr Const ::= Var Int False True [] \Var -> CExpr AExpr AExpr ::= AExpr Expr Binds ::= Bind,Binds Bind Expr Bind ::= Var =CExpr Expr ::= amb Expr Expr Alts ::= Alt,Alts Alt por Expr Expr Alt ::= Pat -> CExpr seq Expr Expr null? Expr Pat ::= True False [] Expr :Expr Var :Var (Var,Var ) (CExpr,CExpr ) case Expr of { Alts } Expr *Expr Außerdem: Präzedenzen und Assoziativitäten Expr +Expr Expr -Expr \Var -> Expr (CExpr ) Const Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

12 Überblick Parserbeschreibung (Auszüge) > %name parse > %tokentype { LFPCTok } Token den Elementen der Grammatik zuordnen > %token > int { TokInt _ $$ } > var { TokVar } > + { TokPlus _ } > - { TokMinus _ } > * { TokMult _ } > False { TokFalse _ } > True { TokTrue _ } > [] { TokNil _ } > : { TokCons _ } > NULL { TokIsNull _ } > Let { TokLet _ } > In { TokIn _ } > Case { TokCase _ } > Of { TokOf _ } >, { TokComma _ } > { { TokCBOpen _ } > } { TokCBClose _ } > ( { TokBOpen _ } > ) { TokBClose _ } > -> { TokArrow _ } > \\ { TokLam _ }... Assoziativit"aten und Pr"azedenzen. Die Pr"azedenzen ergeben sich aus der Reihenfolge, der Direktiven, der am weitesten oben stehende Operator hat niedrigste Pr"azedenz. > %right -> > %right In > %right Of > %left NULL > %left seq > %left amb > %left por > %right : > %left + - > %left * > %nonassoc, > %left NEG > %% Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

13 Überblick Parserbeschreibung (Auszüge) CExpr :: {CoreLFPC} CExpr : Let Binds In CExpr { checkbinds $4 $2 $1 } \\ var -> CExpr { Lambda (mkvar $2) $4 } AExpr { $1 } AExpr : AExpr Expr { App $1 $2 } Expr { $1 } Expr : amb Expr Expr { Amb $2 $3 } por Expr Expr { Por $2 $3 } seq Expr Expr { Seq $2 $3 } NULL Expr { mknull $2} Expr : Expr { cons $1 $3 } ( CExpr, CExpr ) { pair $2 $4 } Case CExpr Of { Alts } { checkalts $2 $1 $5 } Expr * Expr { mkmult $1 $3 } Expr + Expr { mkplus $1 $3 } Expr - Expr { mkmin $1 $3 } ( CExpr ) { $2 } Const { $1 } Binds : Bind { [$1] } Bind, Binds { $1:$3 } Bind : var = CExpr { (mkvar $1) :=: $3 } Alts : Alt { [$1] } Alt, Alts { $1 : $3 } Alt : Pat -> CExpr { $1 $3 } Pat : True { alt_true } False { alt_false } var : var { chkaltcons $2 $1 $3 } [] { alt_nil } ( var, var ) { chkaltpair $3 $2 $4 } ( Pat ) { $2 } Const : var { V (mkvar $1) } int { mkint $1 } False { false } True { true } [] { nil } Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

14 Überblick Notwendige z.t. nicht kontextfreie Tests letrec x 1 = e 1,..., x n = e n in e: Sind die Variablen x i alle verschieden? case-ausdrücke: Sind mehrere Alternativen für den gleichen Konstruktor enthalten? Z.B. falsch: case e of {(x: y) e; (a:y) e } case-alternativen: Sind die Pattern-Variablen verschieden? Z.B. falsch: case e of {(x: x) e;...} Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

15 Übersetzung Überblick Variablen x = CoreVar pos(x) flag origname newname, wobei 1 pos(x) = Position im Quelltext (vom Typ CodeMark). 2 f lag: True, wenn Variable im Quelltext vorkam, False wenn interne Variable 3 origname: Der Name der Variablen im Quelltext 4 newname: der aktuelle Name der Variablen (wg. Umbenennungen) Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

16 Übersetzung Überblick Konstruktoren [] = Cons 1 0 [] True = Cons 3 0 [] False = Cons 4 0 [] e 1 : e 2 = Cons 2 2 [ e 1, e 2 ] (e 1,e 2 ) = Cons 7 2 [ e 1, e 2 ] Zero = Cons 5 0 [] One = Cons 6 0 [] e 1,e 2 = Cons 8 2 [ e 1, e 2 ] Beachte: One, Zero und das spezielle Paar a,b gibt es im Quelltext nicht, wird aber für die Kodierung von Ganzzahlen verwendet. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

17 Übersetzung Überblick Zahlen i = s, b n (i):... :b 1 (i):[] wobei { True, wenn i 0 s = False, sonst { Zero, wenn die j-te Stelle von i in Binärdarstellung 0 ist, b j = One, sonst n die Anzahl der Stellen von i in Binärdarstellung ist. Achtung: Binärdarstellung beginnt mit dem niedrigsten Bit. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

18 Übersetzung Überblick Abstraktion, Applikation, seq, amb por \x -> e = Lambda (pos(x),true,x,x) e e 1 e 2 = App e 1 e 2 seq e 1 e 2 = Seq e 1 e 2 amb e 1 e 2 = Amb e 1 e 2 por e 1 e 2 = Por e 1 e 2 letrec letrec bind 1,..., bind n in e = Let [ bind 1,,..., bind n ] e x = e = (pos(x),true,x,x) :=: e Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

19 Übersetzung Überblick case-ausdrücke case e of {alt 1,... alt n} = Case e (sort [ alt 1,..., alt n,alt n+1,...,alt m]) [] -> e = Alt 1 0 [] e True -> e = Alt 3 0 [] e False -> e = Alt 4 0 [] e Zero -> e = Alt 5 0 [] e One -> e = Alt 6 0 [] e (x:y) -> e = Alt 2 2 [(pos(x),true,x,x),(pos(y),true,y,y)] e (x,y) -> e = Alt 7 2 [(pos(x),true,x,x),(pos(y),true,y,y)] e x,y -> e = Alt 8 2 [(pos(x),true,x,x),(pos(y),true,y,y)] e wobei alt n+1,... alt m Alternativen für Pattern die nicht in den ersten n Vorkommen, wobei die rechte Seite solcher Alternative V ((0,0),False," bot"," bot") ist sort die Alternativen anhand der Konstruktornummern sortiert. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

20 Übersetzung Überblick null?, +, -, * null?e = App ((0,0),False," isnull"," isnull") e e 1 +e 2 = App (App ((0,0),False," plus"," plus" e 1 ) e 2 e 1 -e 2 = e 1 +(-1*e 2 ) e 1 *e 2 = App (App ((0,0),False," mult"," mult") e 1 ) e 2 Code für die Funktionen mkouterlet im Modul LFPC.Parse.InternalOp Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

21 Aufgabe 2 Überblick Aufgabe 2 Implementieren Sie in der Parserdefinition Parser.ly (aus der dann das Modul LFPC.Parse.Parser generiert wird), die in den Aktionen verwendeten Funktionen mkint :: Integer -> CoreLFPC die entsprechend der Übersetzung eine Ganzzahl in die Darstellung innerhalb des Datentyps CoreLFPC konvertiert. checkbinds :: CoreLFPC -> [Bind] -> LFPCTok -> CoreLFPC, die den in-ausdruck, die Bindungen, das Token des letrec-ausdrucks erhält, und prüft, ob alle Bindungsvariablen verschieden sind. Ist dies nicht der Fall, so wird eine Fehlermeldung mithilfe der im übergebenen Token steckenden Informationen generiert. Andernfalls wird der letrec-ausdruck in der Darstellung des Datentyps CoreLFPC zurück gegeben. checkalts :: CoreLFPC -> LFPCTok -> [Alt] -> CoreLFPC, die das erste Argument eines case-ausdrucks, das Token für den case-ausdruck und eine Liste von case-alternativen erhält und einen case-ausdruck im Datentyp CoreLFPC erstellt, wobei geprüft werden muss, ob doppelte case-alternativen enthalten sind. Ist dies der Fall, so wird anhand des Tokens eine Fehlermeldung generiert. Man beachte, das die Grammatik case-ausdrücke ohne Alternativen bereits verbietet, und somit in diesem Fall eine Fehlermeldung generiert wird. fehlende Alternativen entsprechend der Übersetzung hinzufügt werden, die Liste der Alternativen anhand der Konstruktornummern sortiert wird. chkaltpair und chkaltcons, die jeweils die Signatur LFPCTok -> LFPCTok -> LFPCTok -> CoreLFPC -> Alt haben, wobei das erste Token das Token für, oder : eines case-patterns ist, das zweite Argument die erste Patternvariable, das dritte Argument die zweite Patternvariable und das vierte Argument die rechte Seite der Alternativen ist. Beide Funktionen prüfen ob die Patternvariablen verschieden sind (andernfalls wird ein Fehler generiert), und liefern anschließend eine Alternative. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

22 Aufgabe 3 Überblick Aufgabe 3 Geniereren Sie mittels happy den Parser aus der (vervollständigten) Parserspezifikation Parser.ly und testen Sie anschließend den Parser ausgiebig. Professur KIST, SoSe 2009, 20. April Praktikum Funktionale Programmierung, Teil 1

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de

Mehr

Funktionale Programmierung [FP-PR]

Funktionale Programmierung [FP-PR] Praktikum: Funktionale Programmierung [FP-PR] Anleitung zum Praktikum Sommersemester 2009 Stand vom: 15. Juni 2009 Professur für Künstliche Intelligenz und Softwaretechnologie Institut für Informatik,

Mehr

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de

Mehr

Praktikum Funktionale Programmierung Organisation und Überblick

Praktikum Funktionale Programmierung Organisation und Überblick Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung

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

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

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen Inhalte der Vorlesung 4. Der Scanner-Generator lex 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 (3

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

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül Teil 2 WS 2012/2013 Lokale Variablennamen Haskell: let x = exp1 in exp2 Lambda: λ exp1. exp2 Einfache Regel: Der Geltungsbereich eines Lambda-Ausdrucks erstreckt sich soweit wie möglich

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

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

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

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

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

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

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

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

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))

Mehr

Java I Vorlesung Imperatives Programmieren

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

Mehr

Ü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

Linux Prinzipien und Programmierung

Linux Prinzipien und Programmierung Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,

Mehr

Interpreter - Gliederung

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

Mehr

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

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil III SS 2011 Parser Hilfsfunktionen: Die break-funktion ist eine Funktion Höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet. break ::

Mehr

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4 Arbeiten mit s Eine effiziente Programmierung mit PHP ohne seine s ist kaum vorstellbar. Diese Datenstruktur muss man verstanden haben, sonst brauchen wir mit weitergehenden Programmiertechniken wie der

Mehr

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen Java Kurs für Anfänger Einheit 2 Datentypen und Operationen Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 16. Mai 2009 Inhaltsverzeichnis

Mehr

Der λ-kalkül. Frank Huch. Sommersemester 2015

Der λ-kalkül. Frank Huch. Sommersemester 2015 Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der

Mehr

Klassenbeziehungen & Vererbung

Klassenbeziehungen & Vererbung Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in

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

Compilerbau. Einführung in Bison

Compilerbau. Einführung in Bison Compilerbau Einführung in Bison Überblick 1. Bison a) Eingabespezifikation 1. Prolog 2. Definitionsteil 3. Regelteil 4. Epilog b) Bison-Bezeichner und -Funktionen c) Konflikte und Mehrdeutigkeiten d) Debug-Funktionalität

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Übungsblatt 1. Java Vorkurs (WS 2017)

Übungsblatt 1. Java Vorkurs (WS 2017) Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die

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

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri 2009-11-05 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater) Übersicht Variablen Datentypen Werte Operatoren und Ausdrücke Kontrollstrukturen: if, while

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. Es gibt in Haskell bereits primitive Typen: Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,

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

Tag 7. Pattern Matching und eigene Datentypen

Tag 7. Pattern Matching und eigene Datentypen Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf

Mehr

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9 Kapitel 4 Einführung in den Scannergenerator Flex Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9 Generatoren für die lexikalische Analyse Scannergeneratoren werden eingesetzt um die

Mehr

25 kann ohne Rest durch 5 geteilt werden! ist wahr

25 kann ohne Rest durch 5 geteilt werden! ist wahr Lehrbrief 2: Lektion 8 - C -Praxis 4-1 - 5.2 Einfache Entscheidungen mit if und die Vergleichsoperatoren Nun tauchen wir immer tiefer in die Geheimnisse von C ein und beschäftigen uns mit einem sehr wichtigen

Mehr

Behandeln Sie»undefined«als»nicht vorhanden«thema 54

Behandeln Sie»undefined«als»nicht vorhanden«thema 54 Behandeln Sie»undefined«als»nicht vorhanden«151 heitliche Schreibweisen erlauben es den Benutzern, zu erraten, welche Eigenschaften und Methoden zur Verfügung stehen, ohne dass sie sie nachschlagen müssen,

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

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Name: Vorname: Matr. Nr.: Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl Zwischenklausur zu Einführung in die Informatik I Hinweis: In dieser Zwischenklausur

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

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002 1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben

Mehr

Semantik von Formeln und Sequenzen

Semantik von Formeln und Sequenzen Semantik von Formeln und Sequenzen 33 Grundidee der Verwendung von Logik im Software Entwurf Syntax: Menge von Formeln = Axiome Ax K ist beweisbar Formel ϕ beschreiben Korrektkeit Vollständigkeit beschreibt

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

Kapitel 9: Parsing mit Kombinatoren und Generatoren

Kapitel 9: Parsing mit Kombinatoren und Generatoren Funktionale Programmierung (WS2005/2006) 9/1 Kapitel 9: Parsing mit Kombinatoren und Generatoren Lernziele dieses Kapitels 1. Manuelle Konstruktion eines einfachen Scanners 2. Parsing mit Kombinatoren

Mehr

Grundlagen der Informatik 2

Grundlagen der Informatik 2 Grundlagen der Informatik 2 Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Gliederung 1. Einführung

Mehr

Numerische Datentypen. Simon Weidmann

Numerische Datentypen. Simon Weidmann Numerische Datentypen Simon Weidmann 08.05.2014 1 Ganzzahlige Typen 1.1 Generelles Bei Datentypen muss man immer zwei elementare Eigenschaften unterscheiden: Zuerst gibt es den Wertebereich, zweitens die

Mehr

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte

Mehr

Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten)

Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten) Name: «Vorname» «Name» Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten) Informatik 12 2 VP je 2 VP 6 VP 0 Notieren Sie alle Antworten in einer Word-Datei Klausur1_«Name».doc

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

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

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

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

SUDOKU - Strategien zur Lösung

SUDOKU - Strategien zur Lösung SUDOKU Strategien v. /00 SUDOKU - Strategien zur Lösung. Naked Single (Eindeutiger Wert)? "Es gibt nur einen einzigen Wert, der hier stehen kann". Sind alle anderen Werte bis auf einen für eine Zelle unmöglich,

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

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine

Mehr

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr Organisatorisches Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, 14.10., 14 Uhr bis Do, 23.10., 8Uhr. 14.10.2014 IT I - VO 1 1 IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen:

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf:

Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf: JavaScript - Inhalt 1. Objekte 2. Arrays 3. Callbacks 1)JavaScript Objekte Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf: Eine Methode wird immer mit dem Namen des Objekts, einem Punkt

Mehr

Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor

Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 14 4 22 5 16 66 6 24 7 13 8 17 Summe 120 Note Prof. Dr. O.

Mehr

VisualBasic - Variablen

VisualBasic - Variablen Typisch für alle Basic-Dialekte ist die Eigenschaft, dass Variablen eigentlich nicht deklariert werden müssen. Sobald Sie einen Bezeichner schreiben, der bisher nicht bekannt war, wird er automatisch angelegt

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Oktober 2006 Einführung in Haskell: Syntax, Reduktionen, Kernsprachen Haskell,

Mehr

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Softwareentwicklung II (IB) Blatt 2 Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.04.2018 08:07 Abgabe der Aufgabe auf diesem Blatt: bis 02.05.18, 08:00 Uhr durch Pushen

Mehr

JAVA-Datentypen und deren Wertebereich

JAVA-Datentypen und deren Wertebereich Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).

Mehr

Spezifikation lexikalischer Einheiten (Token) als reguläre Ausdrücke in einer Lexer-Spezifikationsdatei (z.b. tiger.lex) Übersetzen nach lex.yy.

Spezifikation lexikalischer Einheiten (Token) als reguläre Ausdrücke in einer Lexer-Spezifikationsdatei (z.b. tiger.lex) Übersetzen nach lex.yy. BISON - Einleitung bison ist ein Programmgenerator, welches ein C oder C++ Programm erzeugt, dass die syntaktische Analyse eines Tokenstroms durchführt Vorgehensweise bie der Erstellung eines Parsers mit

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

Funktionen nur wenn dann

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

Mehr

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

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

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

Inhalt Kapitel 11: Formale Syntax und Semantik

Inhalt Kapitel 11: Formale Syntax und Semantik Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte

Mehr

WhiteStarUML Tutorial

WhiteStarUML Tutorial WhiteStarUML Tutorial Autor: Simon Balázs, BME IIT, 2015. Übersetzung: Kovács Márton, 2015. Installation Herunterladen und installieren Sie das WhiteStarUML: http://sourceforge.net/projects/whitestaruml/

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation

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

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses

Mehr

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

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

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

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Quelltextähnlichkeit

Quelltextähnlichkeit Quelltextähnlichkeit String autor = Tobias Jamin ; String projekt = Arte-Fakt ; String seminar = Transformationen ; Date termin = new Date(3, // Tag 2, // Monat 2006); Presentation praesentation = new

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

Methoden (fortgeschritten) in C# - 1

Methoden (fortgeschritten) in C# - 1 Methoden (fortgeschritten) in C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Opertatoren Überladung 2. delegate 3. Anonyme Methoden delegate Lamda Ausdruck-Lamdas Anweisung-Lamdas Variablenbereich

Mehr

Neben dem Symbol Entwurfsmodus ist das Symbol Befehlschaltfläche zu sehen.

Neben dem Symbol Entwurfsmodus ist das Symbol Befehlschaltfläche zu sehen. Visual Basic / EXCEL Unterrichtsreihe von Herrn Selbach / Makro Programmierung 1. Die Steuerelemente Toolbox Durch Ansicht Symbolleisten Steuerelemente-Toolbox kann man Befehlschaltflächen (CommandButton),

Mehr

Literale. Programmbestandteile. Variable. Schlüsselwörter. Literal: Ein Literal ist ein vordefinierter Name, der für einen festen Wert steht.

Literale. Programmbestandteile. Variable. Schlüsselwörter. Literal: Ein Literal ist ein vordefinierter Name, der für einen festen Wert steht. Programmbestandteile Literale Literale Variablen Schlüsselwörter Zusammengesetzte Formen Literal: Ein Literal ist ein vordefinierter Name, der für einen festen Wert steht. Beispiele: Ziffernfolgen sind

Mehr

Programmieren in Haskell

Programmieren in Haskell Universität Bielefeld AG Praktische Informatik October 12, 2014 Wir begnen mit eem Überblick über die Syntax von Namen versus Schlüsselwörter Namen bezeichnen Werte (aller Art) und sd frei wählbar Schlüsselwörter

Mehr

Wo sind wir? Übersicht lexikale Struktur von Java

Wo sind wir? Übersicht lexikale Struktur von Java Wo sind wir? Java-Umgebung Lexikale Konventionen Datentypen Kontrollstrukturen Ausdrücke Klassen, Pakete, Schnittstellen JVM Exceptions Java Klassenbibliotheken Ein-/Ausgabe Collections Threads Applets,

Mehr