Parsen Hallo Welt! für Fortgeschrittene

Größe: px
Ab Seite anzeigen:

Download "Parsen Hallo Welt! für Fortgeschrittene"

Transkript

1 Parsen Hallo Welt! für Fortgeschrittene Benedikt Rauh

2 Inhalt Einführung Theoretische Grundlagen Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing CYK-Algorithmus Top-Down-Parsing Rekursiver Abstiegsparser Ein- und Ausgabe in Java und C/C++ Parsen - Benedikt Rauh - SS2012 2

3 Einführung Was ist Parsing und wofür braucht man es? Parsing (dt.: Syntaxanalyse) bezeichnet die Zerlegung und Umwandlung einer beliebigen Eingabe in ein für die Weiterverarbeitung brauchbares Format. Außerdem: Verifikation auf korrekte Syntax Anwendungen: HTML-Code der vom Parser im Webbrowser analysiert wird Syntaxanalyse eines Programmcodes als Teil des Compilers Webseitenparsing durch Suchmaschinen mit Hilfe von Crawlern Parsen - Benedikt Rauh - SS2012 3

4 Einführung Beispiel Parsebaum zu 1 + ( ( ( ) / 7) + ( 8 * ( 3 ( 9 * ( 3 * 7 ) ) ) ) ) Parsen - Benedikt Rauh - SS2012 4

5 Einführung Beispiel Der Parser erstellt einen Parsebaum, dieser dient dem Compiler dann als Grundlage zum Übersetzen. In diesem Beispiel befinden sich in den Knoten die Operatoren, in den Blättern die Operanden. Berechnet wird von den Blättern zur Wurzel. Die Baumstruktur ergibt sich aus der Klammerung Parsen - Benedikt Rauh - SS2012 5

6 Einführung Funktionsweise eines Parsers I.d.R. lexikalischer Scanner (Lexer) zur Textanalyse Zerlegung der Eingabedaten in Token Das folgt einer regulären Grammatik, darum ist der Scanner meist ein endlicher Automat Eigentlicher Parser ist meist ein Kellerautomat und kümmert sich um die Grammatik der Eingabe, macht eine Syntaxüberprüfung und erstellt einen Ableitungsbaum Parsen - Benedikt Rauh - SS2012 6

7 Inhalt Einführung Theoretische Grundlagen Formale Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing CYK-Algorithmus Top-Down-Parsing Rekursiver Abstiegsparser Ein- und Ausgabe in Java und C/C++ Parsen - Benedikt Rauh - SS2012 7

8 Theoretische Grundlagen - Formale Grammatiken Definition: Eine formale Grammatik ist ein 4-Tupel G (V, Σ, P,S) mit V: Endliche Menge von Variablen Σ (Sigma): Endliche Menge von Terminalen S: S V, das Startsymbol P ((V Σ) + \ Σ*) x (V Σ)* ist endliche Menge von Produktionen V, Σ und P sind nichtleere Mengen V und Σ sind disjunkt ω (V Σ)* ist aus ω (V Σ) + direkt ableitbar (ω ω ), falls es (u v) P und α, β (V Σ)* gibt mit ω = αuβ und ω = αvβ Chomsky-0 (rekursiv aufzählbar) entspricht dieser allgemeinen Definition einer formalen Grammatik Parsen - Benedikt Rauh - SS2012 8

9 Theoretische Grundlagen Chomsky-Hierarchie Die Chomsky-Hierarchie ist eine Hierarchie von Klassen formaler Grammatiken, die formale Sprachen erzeugen. Sie wurde von Noam Chomsky erstmals 1956 beschrieben. Je höher die Stufe ist, desto stärkere Einschränkungen gelten bei den Ableitungsregeln Eine Typ-k Grammatik ist immer auch in den darunter liegenden Klassen enthalten, d.h. eine Typ-2-Grammatik erfüllt auch die Typen 1 und 0. Parsen - Benedikt Rauh - SS2012 9

10 Theoretische Grundlagen Chomsky-Hierarchie Chomsky-1 (kontextsensitiv) Alle Ableitungsregeln haben die Form (u v) mit u V +, v ((V Σ) \ {S}) + und u v oder S ε. Alle Ableitungsregeln haben die Form αaβ αγβ oder S ε mit α,β (V Σ)*, A V, γ (V Σ)+ Chomsky-2 (kontextfrei) Alle Ableitungsregeln haben die Form (A v) mit A V, v (V Σ)+ Chomsky-3 (regulär, rechtslinear) Alle Ableitungsregeln haben die Form (A v) mit A V und v = a mit a Σ oder v = ab mit a Σ und B V Parsen - Benedikt Rauh - SS

11 Theoretische Grundlagen Chomsky-Hierarchie Programmiersprachen folgen kontextfreien Grammatiken, darum sind diese für das Parsen besonders interessant. Beispiel: G = (V, Σ, P, S) V = {S, A, B, C} Σ = {a, e, h, l, o, t, w} P = {(S AB), (A AB), (A ha), (B CCt), (B ll), (C ow), (C el)} Ableitungen: S AB hab hacct haelct haelowt S AB ABB ABCCt hallowelt Parsen - Benedikt Rauh - SS

12 Theoretische Grundlagen Chomsky-Normalform Für den später besprochenen CYK-Algorithmus muss die Grammatik in Chomsky-Normalform (ChNF) vorliegen. Eine kontextfreie Grammatik ist in Chomsky-Normalform, wenn jede Regel von der Form (A, B, C V) A BC oder A a B, C V \ {S} a Σ ist. Zusätzlich ist S ε erlaubt, dann darf S nicht auf der rechten Seite einer Produktion stehen Jede Grammatik in Chomsky-Normalform ist kontextfrei Zu jeder kontextfreien Grammatik G kann eine kontextfreie Grammatik G in ChNF konstruiert werden, sodass L(G) = L(G ) gilt Parsen - Benedikt Rauh - SS

13 Theoretische Grundlagen Chomsky-Normalform Algorithmus zur Konstruktion von G in ChNF: 1. Ausnahme S ε behandeln 2. ε-regeln löschen 3. Kettenregeln eliminieren 4. Schwache Chomsky-Normalform erzeugen 5. Rechte Seiten mit mehr als zwei Nichtterminalen ersetzen 6. Nutzlose Variablen entfernen Parsen - Benedikt Rauh - SS

14 Theoretische Grundlagen Chomsky-Normalform Kontextfreie Grammatik G = (V, Σ, P, S) V = {S, A, B, C, D}, Σ = {a, b, c, d} S A ab ac ε A B C cad B S Ba ε C D c Bd D d ddd Parsen - Benedikt Rauh - SS

15 Theoretische Grundlagen Chomsky-Normalform 1. Ausnahme S ε behandeln Falls es die Regel S ε gibt, füge neues Startsymbol S und die Regeln S S ein => G enthält das leere Wort, das Startsymbol taucht aber auf keiner rechten Seite auf Grammatik G = (V, Σ, P, S ) S ist neues Startsymbol V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S A ab ac ε neue Regel A B C cad B S Ba ε C D c Bd D d ddd Parsen - Benedikt Rauh - SS

16 Theoretische Grundlagen Chomsky-Normalform 2. ε-regeln löschen Streiche alle Regeln A ε, mit A V \ {S} Ergänze alle Regeln mit A auf der rechten Seite mit einer Produktion ohne A Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S A ab ac a ε A B C cad ε B S Ba a C D c Bd d D d ddd (S ε) wird nicht gelöscht, S a ergänzt ε-regel entstanden ε-regel gelöscht, Regel B a ergänzt Regel C d ergänzt Parsen - Benedikt Rauh - SS

17 Theoretische Grundlagen Chomsky-Normalform 2. ε-regeln löschen Streiche alle Regeln A ε, mit A V \ {S} Ergänze alle Regeln mit A auf der rechten Seite mit einer Produktion ohne A Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S A ab ac a ε A B C cad cd Regel C cd ergänzt B S Ba a C D c Bd d D d ddd Parsen - Benedikt Rauh - SS

18 Theoretische Grundlagen Chomsky-Normalform 3. Kettenregeln eliminieren Kettenregeln sind Produktionen der Art A B mit A, B V Stelle den Graphen aus den Kettenregeln auf Zyklen in diesem Graphen sind starke Zusammenhangskomponenten (ZHK) Ersetze in den starken ZHK die Variablen durch eine davon (S muss übrig bleiben) und ersetze die ersetzten Variablen durch die übriggebliebene Ersetze nun in dem kreisfreien Graphen von unten nach oben (topologische Reihenfolge) die Kettenregeln A B durch A alle rechten Seiten von B Parsen - Benedikt Rauh - SS

19 Theoretische Grundlagen Chomsky-Normalform 3. Kettenregeln eliminieren Starke ZHK entfernen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S A ab ac a ε A B C cad cd B S Ba a C D c Bd d D d ddd Parsen - Benedikt Rauh - SS

20 Theoretische Grundlagen Chomsky-Normalform 3. Kettenregeln eliminieren Starke ZHK entfernen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S as ac ε S C csd cd S Sa a C D c Sd d D d ddd Parsen - Benedikt Rauh - SS

21 Theoretische Grundlagen Chomsky-Normalform 3. Kettenregeln eliminieren Kettenregeln von unten nach oben ersetzen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S as ac ε S C csd cd S Sa a C d ddd c Sd D d ddd Parsen - Benedikt Rauh - SS

22 Theoretische Grundlagen Chomsky-Normalform 3. Kettenregeln eliminieren Kettenregeln von unten nach oben ersetzen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S }, Σ = {a, b, c, d} S S S a Sa as ac csd cd d ddd c Sd ε C d ddd c Sd D d ddd Parsen - Benedikt Rauh - SS

23 Theoretische Grundlagen Chomsky-Normalform 4. Schwache Chomsky-Normalform erzeugen Ordne jedem Terminalsymbol a ein Nichtterminal X a zu Ersetze alle Terminalsymbole a auf der rechten Seite der Produktionen durch X a Füge alle Produktionen X a a der Grammatik hinzu Parsen - Benedikt Rauh - SS

24 Theoretische Grundlagen Chomsky-Normalform 4. Schwache Chomsky-Normalform erzeugen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S, X a, X b, X c, X d }, Σ = {a, b, c, d} S S S X a SX a X a S X a C X c SX d X c X d X d X d DD X c SX d ε C X c SX d X d X d DD D X d X d DD X a a X b b X c c X d d Parsen - Benedikt Rauh - SS

25 Theoretische Grundlagen Chomsky-Normalform 5. Rechte Seiten mit mehr als zwei Nichtterminalen ersetzen Sind auf der rechten Seite einer Produktion mehr als zwei Nichtterminale, ersetze zwei Nichtterminal AB durch Y AB. Füge die Produktion Y AB AB der Grammatik hinzu Wiederhole diese Schritte, bis jede Produktion höchstens zwei Nichtterminal auf der rechten Seite hat Parsen - Benedikt Rauh - SS

26 Theoretische Grundlagen Chomsky-Normalform 5. Rechte Seiten mit mehr als zwei Nichtterminalen ersetzen Grammatik G = (V, Σ, P, S ) V = {S, A, B, C, D, S, X a, X b, X c, X d, Y XcS, Y DD }, Σ = {a, b, c, d} S S S X a SX a X a S X a C Y XcS X d X c X d X d X d Y DD X c SX d ε C X c SX d X d X d Y DD D X d X d Y DD X a a, X b b, X c c, X d d Y XcS X c S Y DD DD Parsen - Benedikt Rauh - SS

27 Theoretische Grundlagen Chomsky-Normalform 6. Nutzlose Variablen entfernen Eine Variable A heißt nutzlos, wenn es kein Wort ω Σ* gibt mit S αaβ ω. Sonst heißt sie nützlich. Entferne nutzlose Variablen und alle Produktionen, in denen nutzlose Variablen auf der linken oder rechten Seite vorhanden sind Alle unerreichbaren Varialen und alle Produktionen mit unerreichbaren Varialben auf der linken Seite können gelöscht werden Grammatik G = (V, Σ, P, S ) X b b ist nutzlos Parsen - Benedikt Rauh - SS

28 Inhalt Einführung Theoretische Grundlagen Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing CYK-Algorithmus Top-Down-Parsing Rekursiver Abstiegsparser Ein- und Ausgabe in Java und C/C++ Parsen - Benedikt Rauh - SS

29 Parsen - Übersicht Man teilt die Parse-Verfahren in zwei Hauptgruppen ein: Bottom-Up CYK-Parser LR-Parser (Left to right, Rightmost derivation) LALR-Parser (Lookahead-LR-Parser) Top-Down Rekursiver Abstiegsparser Early-Parser LL-Parser Parsen - Benedikt Rauh - SS

30 Bottom-Up-Parsing Bottom-Up bedeutet, dass der Parser von der kleinsten vorgefunden Einheit (Bottom) in Richtung des größten Zusammenhangs (Up) arbeitet Es wird von den Token (Wörtern) des Eingabesatzes ausgehend versucht, immer größere syntaktische Strukturen aufzubauen, bis man beim Startsymbol ankommt Wichtiger Algorithmus der nach dem Bottom-Up-Prinzip arbeitet: CYK Parsen - Benedikt Rauh - SS

31 CYK-Algorithmus - Hintergrund Der Cocke-Younger-Kasami-Algorithmus wurde in den 1960er Jahren unabhängig voneinander von Itiroo Sakai, John Cocke, Tadao Kasami, Jacob Schwartz und Daniel Younger entwickelt Es ist ein Algorithmus, der das Wortproblem für kontextfreie Sprachen löst, d.h. mit ihm lässt sich feststellen, ob ein Wort zu einer Sprache gehört oder nicht Ein C-Programm ist z.b. ein Wort der kontextfreien Sprache C Mit Hilfe von Backtracking kann der Parse-Tree eines gegebenen Wortes konstruiert werden Die Grammatik muss in ChNF vorliegen Parsen - Benedikt Rauh - SS

32 CYK-Algorithmus - Laufzeit Der CYK-Algorithmus nutzt das Prinzip der dynamischen Programmierung, dadurch ist er sehr effizient Laufzeit: O( P *n³), wobei P die Anzahl der Ableitungsregeln und n die Wortlänge ist Platzbedarf: O(n²* P ) Betrachtet man eine bestimmte Grammatik und nur verschiedene Wörter ω, ist P eine Konstante, die Laufzeit O(n³) und der Platzbedarf O(n²) Parsen - Benedikt Rauh - SS

33 CYK-Algorithmus Der Algorithmus Gegen sei eine kontextfreie Grammatik G(V, Σ, P, S) in ChNF Alle Variablen seien nützlich und ein Wort ω = a 1 a 2 a n Σ* gegeben Frage: Ist ω L(G)? Berechne: V(i,j) = {A A V, A a i a j }, mit i j V(i, i) = {A (A a i ) P} V(i, j) = {A (A BC) P, B V(i,k), C V(k+1, j), k {i, j-1}} ω L(G) S V(1,n) Parsen - Benedikt Rauh - SS

34 CYK-Algorithmus Der Algorithmus (angepasst) Gegen sei eine kontextfreie Grammatik G(V, Σ, P, S) in ChNF Alle Variablen seien nützlich und ein Wort ω = a 1 a 2 a n Σ* gegeben Frage: Ist ω L(G)? Berechne: V(i,j) = {A A V, A a j a j+i-1 }, mit i+j j+1 V(1, j) = {A (A a j ) P} V(i, j) = {A (A BC) P, B V(k,j), C V(j-k, j+k), k {1, i-1}} ω L(G) S V(n,1) Parsen - Benedikt Rauh - SS

35 CYK-Algorithmus Beispiel Gegen sei die Grammatik G = ({S,A,B,C}, {a,b}, P, S) Produktionen P der Grammatik: S AB BC A BA a B CC b C AB a Lässt sich das Wort ω = bbabaa durch G erzeugen? Parsen - Benedikt Rauh - SS

36 CYK-Algorithmus Beispiel S AB BC A BA a B CC b V i,j 1 (b) 2 (b) 3 (a) 4 (b) 5 (a) 6 (a) 1 {B} {B} {A,C} {B} {A,C} {A,C} 2 {} {S,A} {S,C} {S,A} {B} C AB a => bbabaa lässt sich nicht erzeugen 3 {A} {S,C} {B} {} 4 {S,C} {B} {S,A} 5 {} {S,A} 6 {A} Parsen - Benedikt Rauh - SS

37 CYK-Algorithmus Beispiel S AB BC A BA a B CC b V i,j 1 (a) 2 (a) 3 (b) 4 (a) 5 (a) 6 (a) 1 {A,C} {A,C} {B} {A,C} {A,C} {A,C} 2 {B} {S,C} {S,A} {B} {B} C AB a => aabaaa lässt sich erzeugen 3 {B} {B} {} {S,A, C} 4 {S,A, C} {S,A} 5 {B} {B} {S,A, C} 6 {S,A, C} Parsen - Benedikt Rauh - SS

38 CYK-Algorithmus - Pseudocode On input x = x 1 x 2 x n : for (i = 1 n) for (each variable A) if (A x i ) add A to table[1][i] for ( i = 2 to n) for (j = 1 to n-i+1) for (k = 1 to i-1) // Partition of the word for (each var. A) for (each var. B in table[k][j]) for (each var. C in table[i-k][j+k]) if (A BC) add A to table[i][j] return S table[n][1]? ACCEPT : REJECT Parsen - Benedikt Rauh - SS

39 Inhalt Einführung Theoretische Grundlagen Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing CYK-Algorithmus Top-Down-Parsing Rekursiver Abstiegsparser Ein- und Ausgabe in Java und C/C++ Parsen - Benedikt Rauh - SS

40 Top-Down-Parsing Weitere Möglichkeit zum Lösen des Wortproblems Konstruiert Ableitungsbäume ausgehend vom Startsymbol (Top) bis hinunter zu den Terminalen (Down) Der Abstieg erfolgt nach dem Schema Tiefe zuerst Von links nach rechts Regeln in der Reihenfolge der Grammatik Laufzeit: O(n n ) Parsen - Benedikt Rauh - SS

41 Top-Down-Parsing Rekursiver Abstiegsparser Vorgehen: Erzeuge ausgehend vom Startsymbol mögliche Ableitungen und vergleiche sie mit der Eingabe Folge diesem Schema: Betrachte in der Teilableitung den linken, nicht expandierten Knoten Wende die erste passende Ersetzungsregel an ( Expand ) Vergleiche erzeugte Terminalsymbole mit den Eingabewörtern ( Scan ) Falls die Wörter nicht übereinstimmen, suche nach Alternativen Ableitungen ( Backtracking ) Parsen - Benedikt Rauh - SS

42 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V NP Det der die das N Löwe Zebra V liebt frisst Parsen - Benedikt Rauh - SS

43 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: - S der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

44 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

45 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

46 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N der S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

47 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N der S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

48 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N der Löwe S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

49 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N der Löwe S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

50 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N der Löwe S V VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

51 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S V der Löwe liebt VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

52 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S V der Löwe liebt VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

53 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Backtrack NP Det N der Löwe S V VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

54 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S V der Löwe frisst VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

55 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S V der Löwe frisst VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

56 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Backtrack NP Det N der Löwe S VP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

57 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N der Löwe S V VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

58 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S V der Löwe liebt VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

59 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S V der Löwe liebt VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

60 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Backtrack NP Det N der Löwe S V VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

61 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S V der Löwe frisst VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

62 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S V der Löwe frisst VP NP der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

63 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S der Löwe frisst VP NP V Det N der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

64 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP NP V Det N der Löwe frisst der der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

65 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S VP NP V Det N der Löwe frisst der der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

66 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Backtrack NP Det N S der Löwe frisst VP NP V Det N der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

67 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP NP V Det N der Löwe frisst die der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

68 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S VP NP V Det N der Löwe frisst die der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

69 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S der Löwe frisst VP NP V Det N der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

70 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP NP V Det N der Löwe frisst das der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

71 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S VP NP V Det N der Löwe frisst das der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

72 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP NP V Det N der Löwe frisst das Löwe der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

73 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S VP NP V Det N der Löwe frisst das Löwe der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

74 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Backtrack NP Det N S VP NP V Det N der Löwe frisst das der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

75 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Expand NP Det N S VP NP V Det N der Löwe frisst das Zebra der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

76 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: Scan NP Det N S VP NP V Det N der Löwe frisst das Zebra der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

77 Top-Down-Parsing Rekursiver Abstiegsparser Beispiel: Ist der Löwe frisst das Zebra L(G)? Grammatik: S NP VP NP Det N N VP V V NP Det der die das N Löwe Zebra V liebt frisst Operation: - NP Det N S VP NP V Det N der Löwe frisst das Zebra der Löwe frisst das Zebra Parsen - Benedikt Rauh - SS

78 Rekursiver Abstiegsparser Eigenschaften/Probleme Nachteile: Die Eingabe wird nicht berücksichtigt Es werden Teilstrukturen untersucht, die niemals zum Eingabesatz führen können Falsche Teilstrukturen werden immer wieder untersucht, bis alle Expansionsmöglichkeiten ausgenutzt wurden Strukturelle Mehrdeutigkeiten: Wenn alle Lesearten für eine Eingabe gefunden werden sollen, muss im schlimmsten Fall der gesamte Suchraum der Grammatik erkundet werden Ein Junggeselle ist ein Mann, dem zum Glück noch die Frau fehlt. Parsen - Benedikt Rauh - SS

79 Rekursiver Abstiegsparser Eigenschaften/Probleme Linksrekursionen: Die Ausgangsgrammatik darf keine Linksrekursion enthalten, sonst hängt sich der Parser in einer Endlosrekursion auf! A AX a X c A ca A X a A X a Lösung: B Bb b => B bb b Oder Einführung einer neuen Variable A A AX a X c A X c A X c A X a A X a Parsen - Benedikt Rauh - SS

80 Rekursiver Abstiegsparser LL(k)-Grammatik Rekursiver Abstiegsparser (RDP) mit LL(k)-Grammatik als Eingabe (predictive parser): Benötigt kein Backtracking Der RDP entscheidet mithilfe der folgenden k Token, welche Produktion er nehmen muss Laufzeit: O(n) LL(k)-Grammatiken sind kontextfrei Nicht alle kontextfreien Grammatiken lassen sich in LL(k)- Grammatiken umwandeln Parsen - Benedikt Rauh - SS

81 Rekursiver Abstiegsparser Beispiel Grammatik G: S A A bab a B abaa b G ist eine LL(1)-Grammatik, d.h. das erste Zeichen einer linken Seite genügt um eindeutig zu entscheiden, ob die Produktion anzuwenden ist Der Zugehörige Parser ist deterministisch und benötigt kein Backtracking Bei einer allgemeinen kontextfreien Grammatik müsste der Rückgabewert der Funktionen vom Typ Boolean sein und würde bei False Backtracking auslösen Parsen - Benedikt Rauh - SS

82 Rekursiver Abstiegsparser Beispiel Das folgende Programm bricht mit einer Fehlermeldung ab, wenn das Eingabewort nicht Teil der Grammatik ist, sonst terminiert es ohne Rückmeldung Für jede Variable wird eine eigene Funktion benötigt (!) Die globale Variable symbol enthält das nächste Eingabesymbol Die Funktion getsymbol aktualisiert symbol beim Aufruf Parsen - Benedikt Rauh - SS

83 Rekursiver Abstiegsparser Beispiel typedef enum {a, b} Symbol; Symbol symbol; void getsymbol(); void error(const char msg[]); // S A void S() { } A(); if (symbol!= EOF) { error ( Wort ist nicht in L(G) ); } Parsen - Benedikt Rauh - SS

84 Rekursiver Abstiegsparser Beispiel // A bab a void A() { } if (symbol == a) { getsymbol(); } else if (symbol == b) { getsymbol(); A(); B(); } else { error ( Wort ist nicht in L(G) ); } Parsen - Benedikt Rauh - SS

85 Rekursiver Abstiegsparser Beispiel // B abaa b void B() { } if (symbol == b) { getsymbol(); } else if (symbol == a) { getsymbol(); B(); A(); A(); } else { error ( Wort ist nicht in L(G) ); } Parsen - Benedikt Rauh - SS

86 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A S() { A bab a B abaa b Parsen - Benedikt Rauh - SS

87 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a S() { A() { B abaa b Parsen - Benedikt Rauh - SS

88 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { B() { Parsen - Benedikt Rauh - SS

89 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { B() { B() { Parsen - Benedikt Rauh - SS

90 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { B() { Parsen - Benedikt Rauh - SS

91 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { Parsen - Benedikt Rauh - SS

92 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { A() { A() { Parsen - Benedikt Rauh - SS

93 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { A() { Parsen - Benedikt Rauh - SS

94 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { symbol == b A() { B() { A() { Parsen - Benedikt Rauh - SS

95 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { symbol == b A() { symbol == a} B() { A() { Parsen - Benedikt Rauh - SS

96 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { symbol == b A() { symbol == a} B() { symbol == b} } A() { Parsen - Benedikt Rauh - SS

97 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { symbol == b A() { symbol == a} B() { symbol == b} } A() { symbol == a} Parsen - Benedikt Rauh - SS

98 Rekursiver Abstiegsparser Beispiel Ist bbababbaba L(G)? S A A bab a B abaa b S() { A() { symbol == b A() { symbol == b A() { symbol == a } B() { symbol == b } } B() { symbol == a B() { symbol == b} A() { symbol == b A() { symbol == a} B() { symbol == b} } A() { symbol == a} } } } Parsen - Benedikt Rauh - SS

99 Inhalt Einführung Theoretische Grundlagen Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing CYK-Algorithmus Top-Down-Parsing Rekursiver Abstiegsparser Ein- und Ausgabe in Java und C/C++ Parsen - Benedikt Rauh - SS

100 Einlesen in Java - StringTokenizer java.util.* public class StringTokenizer extends Object implements Enumeration<Object> Zerteilt einen String in die einzelnen Wörter. Konstruktor: StringTokenizer st = new StringTokenizer(String str [, String delim][, boolean returndelims]); In delim können die Trennzeichen angegeben werden; falls returndelims == true, werden Trennzeichen wie Token behandelt Standardtrennzeichen: \t\n\r\f : Leerzeichen, Tabulator, Newline, Carriage return, Formularvorschub (form-feed) Parsen - Benedikt Rauh - SS

101 Einlesen in Java - StringTokenizer Beispielaufruf: StringTokenizer st = new StringTokenizer( Das ist ein Beispiel ); while (st.hasmoretokens()) { System.out.pirntln(st.nextToken()); } //Gibt jedes Wort in einer eigenen Zeile aus. Funktionen: boolean hasmoretokens(); Test auf weitere Wörter String nexttoken(); Gibt das nächste Wort zurück int counttokens(); Liefert die Anzahl der Wörter Parsen - Benedikt Rauh - SS

102 Einlesen in Java StringTokenizer java.lang.* String in eine Zahl umwandeln int i = Integer.parseInt(String ganzzahl); ganzzahl darf nur +, - oder Zahlen enthalten float f = Float.parseFloat(String kommazahl); double d = Double.parseDouble(String kommazahl); Parsen - Benedikt Rauh - SS

103 Einlesen in Java - Scanner java.util.* public final class Scanner extends Object implements Iterator<String> Der Scanner ist ein Tokenizer, der die Token gleich im richtigen Datentyp zurückgibt Konstrukorenauswahl: Scanner(File source); Scanner(InputStream source); Scanner(String source); Parsen - Benedikt Rauh - SS

104 Einlesen in Java - Scanner Methoden: public boolean hasnextline(); True, falls im Input des Scanners noch eine Zeile ist public String nextline(); Liest eine Zeile als String ein public boolean hasnext[boolean, Byte, Double, Float, Int, Long ](); True, falls das nächste Wort vom gewünschten Typ ist public String next(); int nextint(); float nextfloat(); Liefert das nächste Wort und speichert es im gewünschten Datentyp ab public void close(); Schließt den Scanner und gibt Ressourcen frei public Scanner uselocale(locale loc) Locale.ENGLISH oder Locale.GERMAN für unterschiedliche Zahlendarstellung: 1, <-> 1.000,00 Parsen - Benedikt Rauh - SS

105 Einlesen in Java - Scanner Beispiele: Scanner sc = new Scanner(System.in); int i = sc.nextint(); String input = 42,0 foo cyan foo ; Scanner s = new Scanner(input).useDelimiter( \\s*foo\\s* ) s.uselocale(locale.german); System.out.println(s.nextFloat()); System.out.println(s.next()); s.close(); /*Ausgabe: 24,0 cyan */ Parsen - Benedikt Rauh - SS

106 Einlesen in Java - BufferedReader java.io.* public class BufferedReader extends Reader Liest Text von einem Character-Input Stream: BufferedReader in = new BufferedReader ( new FileReader( foo.in )); BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in)); Parsen - Benedikt Rauh - SS

107 Einlesen in Java - BufferedReader Einige Funktionen des BufferedReaders: int read() Liest einen einzelnen Character String readline() Liest eine Zeile int read(char[] cbuf, int off, int len) Liest bis zu len Characters und schriebt diese ab cbuf[off] in cbuf void close() Schließt den Stream und gibt belegte Ressourcen frei Parsen - Benedikt Rauh - SS

108 Ausgabe in Java System.out.print(data); Ausgabe beliebiger (auch gemischter) primitiver Datentypen Beispiel: System.out.print( There are only + i + types of people in the world: + Those who understand binary and those who don t ); > There are only 10 types of people in the world: Those who understand binary and those who don t System.out.println(data); System.out.print() mit Zeilenumbruch Parsen - Benedikt Rauh - SS

109 Ausgabe in Java System.out.printf(String format, Object args); Analog zu printf in C/C++ Der Formatstring enthält Platzhalter für die nachfolgenden Argumente args, wobei diese typabhängig sind. Gängige Typen: int = %d, float = %f, char = %c, String = %s, int in Hexschreibweise = %x, boolean = %b, Neue Zeile = %n, Zeilenumbruch = \n Beispiele: System.out.printf( %s://%s/%s\n", "http", "host", "path"); System.out.printf( 05d %5d %f %.2f \n, i, -i, f, -f); , ,57 String[] arg = { Jochen, Uta } System.out.printf( Hallo %s. Hallo %s.\n, arg); Hallo Jochen. Hallo Uta. Parsen - Benedikt Rauh - SS

110 Einlesen in C/C++ #include <cstdio> (C++) / <stdio.h> (C) int scanf (const char *format, ); Gegenstück zu printf. Überprüft die Eingabe (stdin) auf format und speichert gewünschte Token in den nachfolgend angegebenen Zeigervariablen Jeder Character in format muss exakt der Eingabe entsprechen, zu viel whitespace wird ignoriert, für jeden Token schreibt man einen Platzhalter der Art %[Typ] Gibt Anzahl der gelesenen Token zurück int fscanf(file *stream, const char *format, ); Liest aus stream statt stdin Beispiel: //Eingabe: Raser: Tobias, Geschwindigkeit: 120 km/h. succ = scanf( Raser: %s, Geschwindigkeit: %d km/h., &driver[0], &speed[0]); //Fehlerbehandlung Parsen - Benedikt Rauh - SS

111 Einlesen in C/C++ #include <cstdio> (C++) / <stdio.h> (C) char *fgets(char *string, int size, FILE *stream); Liest eine Zeile von stream, aber maximal size-1 Zeichen, und speichert sie in string Gibt bei Erfolg string, bei einem Fehler und EOF NULL zurück => zur Fehlerüberprüfung errno abfragen Beispiel: errno = 0; int i = 0; while(null!= fgets(dest[i], 100, stdio)) {i++; } if (errno!= 0) { perror( fgets ); } Parsen - Benedikt Rauh - SS

112 Einlesen in C/C++ #include <cstring> (C++) / <string.h> (C) char *strtok(char *str, const char *delimiters); Trennt den ersten Token von str mit den in delimiters angegebenen Trennzeichen ab und gibt ihn zurück Für weitere Token: Aufruf von strtok mit NULL! Gibt NULL zurück wenn kein Token mehr übrig ist Beispiel: char str[] = Hallo Welt! ; char *out; out = strtok (str, \t\n\r\f ); while (NULL!= (out = strtok(null, \t\n\r\f ) { printf ( %s\n, out); } Parsen - Benedikt Rauh - SS

113 Einlesen in C/C++ #include <cstdlib> (C++) / <stdlib.h> (C) Typkonvertierung: int atoi (const char *string); //String -> int double atof (const char *string); //String -> double long int atol (const char *string); long int strtol (const char *str, char **endptr, int base); Konvertiert str zur Basis base in long int endptr zeigt auf das erste Zeichen des nicht konvertierten Eingaberests Parsen - Benedikt Rauh - SS

114 Einlesen in C++ #include <iostream> using namespace std; cin (nur C++) Liest beliebige primitive Datentypen (int, long, float, double, char ) ein istream:: getline (char *string, streamsize n); Beispiele: cin >> var_int >> var_float [ ]; cin.getline(name, 256); Parsen - Benedikt Rauh - SS

115 Ausgabe in C/C++ #include <cstdio> (C++) / <stdio.h> (C) int printf (const char *format, ); Wie System.out.printf( ) in Java (S. 109) int fprintf(file *stream, const char *format, ); In stream kann ein Ausgabekanal gewählt werden int [f]putc(int c, FILE *stream); Schreibt den Character c nach stream int fputs(const char *s, FILE *stream); Schreibt den String s nach stream ohne den Terminator \0 int puts(const char *s); Schreibt String s nach stdout und fügt \n an int putchar (int c); <=> putc(c, stdout); Parsen - Benedikt Rauh - SS

116 Ausgabe in C++ #include <iostream> (nur C++) using namespace std; cout << var1 << hier steht text << << endl; cerr << das ist eine Fehlermeldung: << errno << endl; endl : Zeilenumbruch Gegenstück zu cin Wenn es auf die Geschwindigkeit ankommt: StringTokenizer < BufferedReader < Scanner fgets < scanf < cin printf < cout < System.out.println < System.out.printf Allgemein ist C/C++ unter Linux schneller als Java, unter Windows ist der Unterschied aber nicht mehr so deutlich Parsen - Benedikt Rauh - SS

117 Fragen? Parsen - Benedikt Rauh - SS

118 Quellen John E. Hopcroft: Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie. 2. Auflage, 2002 Ingo Wegener: Theoretische Informatik eine algorithmische Einführung. G. Teubner Stuttgart Leipzig 1999 Mitschrift Berechenbarkeit und formale Sprachen, Prof. Rolf Wanka, WS 2010/11 Wikipedia.org Vorlesung: Einführung in die Computerlinguistik Syntaktische Verarbeitung, Benjamin Roth, Daniel Bauer, WS 2008/ Bild Folie 4: Java API: Christian Ullenboom: Java ist auch eine Insel. 5. Auflage C++ Referece: Linux man page: linux.die.net/man Parsen - Benedikt Rauh - SS

119 Fragen: Quellen Top-Down-Parsing: Bottom-Up-Parsing: Parsen - Benedikt Rauh - SS

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

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie

Mehr

Wortproblem für kontextfreie Grammatiken

Wortproblem für kontextfreie Grammatiken Wortproblem für kontextfreie Grammatiken G kontextfreie Grammatik. w Σ w L(G)? Wortproblem ist primitiv rekursiv entscheidbar. (schlechte obere Schranke!) Kellerautomat der L(G) akzeptiert Ist dieser effizient?

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Thomas Wehr Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie

Mehr

Theorie der Informatik

Theorie der Informatik Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften

Mehr

Hallo Welt für Fortgeschrittene Parsen

Hallo Welt für Fortgeschrittene Parsen Hallo Welt für Fortgeschrittene Parsen Michael Hußnätter 30. April 2014 Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

2.11 Kontextfreie Grammatiken und Parsebäume

2.11 Kontextfreie Grammatiken und Parsebäume 2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen reguläre Grammatiken/prachen Beschreibung für Bezeichner in Programmiersprachen Beschreibung für wild cards in kriptsprachen (/* reguläre Ausdrücke */)?; [a-z]; * kontextfreie Grammatiken/prachen Beschreibung

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

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

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

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-Basics 2. DI Gerhard Fließ IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2009, 16. Juli 2009 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

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

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informatik I WS 07/08 Tutorium 24 20.12.07 Bastian Molkenthin E-Mail: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Rückblick Semi-Thue-Systeme Ein Semi-Thue-System besteht

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Dominik Neumann Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Begriffserklärung Grundlagen Formale Grammatiken Chomsky-Hierarchie Chomsky-Normalform

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Mathematische Grundlagen der Informatik 2

Mathematische Grundlagen der Informatik 2 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss emanuel.duss@gmail.com 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19 Inhalt 1 inführung 2 Automatentheorie und ormale prachen Grammatiken Reguläre prachen und endliche Automaten Kontextfreie prachen und Kellerautomaten Kontextsensitive und yp 0-prachen 3 Berechenbarkeitstheorie

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

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

Anmerkungen zur Übergangsprüfung

Anmerkungen zur Übergangsprüfung DM11 Slide 1 Anmerkungen zur Übergangsprüfung Aufgabeneingrenzung Aufgaben des folgenden Typs werden wegen ihres Schwierigkeitsgrads oder wegen eines ungeeigneten fachlichen Schwerpunkts in der Übergangsprüfung

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Übung Theoretische Grundlagen Nachtrag zur Vorlesung Dirk Achenbach 21.11.2013

Übung Theoretische Grundlagen Nachtrag zur Vorlesung Dirk Achenbach 21.11.2013 Übung Theoretische Grundlagen Nachtrag zur Vorlesung Dirk Achenbach 21.11.2013 INSTITUT FÜR KRYPTOGRAPHIE UND SICHERHEIT KIT University of the State of Baden-Wuerttemberg and National Laboratory of the

Mehr

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) 1. Aufgabe 6 Punkte Geben Sie Definitionen an für: float var; 1 a) eine float-variable var: b) einen Zeiger pvar, der float *pvar = &var; 1 auf die

Mehr

Grammatiken. Einführung

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

Mehr

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Informatik Repetitorium SS 2009 Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Operatoren und Datentypen Beispiel: Anweisungen Variable int a float b int c a= a % (int) (++b-1/4) Vorher 36 3.5 c=b

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Kapitel 2: Formale Sprachen Gliederung

Kapitel 2: Formale Sprachen Gliederung Gliederung 0. Einleitung und Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 2.1. Chomsky-Grammatiken 2.2. Reguläre Sprachen 2.3. Kontextfreie Sprachen

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

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

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02 Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02 Prof. Dr.-Ing. Holger Vogelsang (FH-Karlsruhe) Dipl.-Inform. (FH) Gudrun Keller (FH-Karlsruhe) Dipl.-Inform. Mathias Supp (.riess

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Informatik Grundlagen, WS04, Seminar 13

Informatik Grundlagen, WS04, Seminar 13 Informatik Grundlagen, WS04, Seminar 13 Informatik Informatik Grundlagen, Seminar 13 WS04 1 Was wir heute besprechen Nachbesprechen von Übungsblatt 11 Rekursion Grundprinzipien Übung Besprechung Übungsblatt

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische nformatik inheit 3 Kontextfreie Sprachen 1. Kontextfreie Grammatiken 2. Pushdown Automaten 3. igenschaften kontextfreier Sprachen Theoretische nformatik inheit 3.1 Kontextfreie Grammatiken

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen Grundlagen der Programmierung Prof. H. Mössenböck 3. Verzweigungen If-Anweisung n > 0? j n if (n > 0) x = x / n; ohne else-zweig x x / n j max x x > y? n max y if (x > y) max = x; else max = y; mit else-zweig

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Musterlösungen zur Klausur Informatik 3

Musterlösungen zur Klausur Informatik 3 Musterlösungen zur Klausur Informatik 3 Justus-Liebig-Universität Gießen Wintersemester 2003/2004 Aufgabe 1 (6 Punkte) Man kreuze bei den folgenden Deklarationen und Definitionen jeweils an, ob sie aus

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

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

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2 Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2 von Christoph Knabe http://public.beuth-hochschule.de/~knabe/ Ch. Knabe: Operationalisierbare Qualitätskriterien

Mehr

7 Rechnen mit Polynomen

7 Rechnen mit Polynomen 7 Rechnen mit Polynomen Zu Polynomfunktionen Satz. Zwei Polynomfunktionen und f : R R, x a n x n + a n 1 x n 1 + a 1 x + a 0 g : R R, x b n x n + b n 1 x n 1 + b 1 x + b 0 sind genau dann gleich, wenn

Mehr

Prüfung Computation, Programming

Prüfung Computation, Programming Prüfung Computation, Programming 1. Computation: Reguläre Ausdrücke [5 Punkte] Zusammenfassung reguläre Ausdrücke a Das Zeichen a. Ein beliebiges Zeichen [abc] Ein beliebiges Zeichen aus der Menge {a,

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

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

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

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

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Erwin Grüner 09.02.2006

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

Mehr

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife Praktikum Ingenieurinformatik Termin 2 Verzweigungen (if-else), printf und scanf, while-schleife 1 1. Import/Export von Eclipse-Projekten 2. Verzweigungen (if-else-anweisung) 3. printf und scanf 4. Übungsaufgaben

Mehr

Mächtigkeit von WHILE-Programmen

Mächtigkeit von WHILE-Programmen Mächtigkeit von WHILE-Programmen Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 26. November 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Programmiervorkurs WS 2012/2013. Schleifen und Methoden Programmiervorkurs WS 2012/2013 Schleifen und Methoden Ein Befehl soll mehrfach ausgeführt werden, z.b.: public class MyCounter { System.out.println(1); Ein Befehl soll mehrfach ausgeführt werden, z.b.:

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

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

1. Formale Sprachen 1.2 Grammatiken formaler Sprachen

1. Formale Sprachen 1.2 Grammatiken formaler Sprachen 1. Formale Sprachen 1.2 Grammatiken formaler Sprachen Die Regeln zur Bildung korrekter Wörter einer Sprache kann man in einer natürlichen Sprache formulieren. Da dies jedoch wieder Mehrdeutigkeiten mit

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r ) Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen

Mehr

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut. Binäre Suchbäume Tries (Folie 182, Seite 58 im Skript) In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut. In Tries entspricht die ite Verzweigung dem iten Zeichen des Schlüssels.

Mehr

Übungen für Woche 10

Übungen für Woche 10 Übungen für Woche 10 Martin Rubey 12. Januar 2011 Die folgenden Übungen sollen den Umgang mit Backtracking und kombinatorischen Spezies näherbringen. Genaue Hinweise gibt es erst auf Seite 5. Zur Erinnerung:

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten Matrikelnummer: Punkte: Testklausur 1 zur Vorlesung Modellierung und Programmierung I Dr. Monika Meiler Zeit: 60 Minuten Bemerkungen: Jedes Blatt ist mit der Matrikelnummer zu versehen. Jede Aufgabe ist

Mehr

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.) Seite 1/7 Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.) Hier sehen Sie eine Anleitung wie man einen Serienbrief erstellt. Die Anleitung

Mehr

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum 4. Lernen von Entscheidungsbäumen Klassifikation mit Entscheidungsbäumen Gegeben sei eine Menge von Objekten, die durch /Wert- Paare beschrieben sind. Jedes Objekt kann einer Klasse zugeordnet werden.

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr