Seminar Informatik: Syntaxanalyse von DKFG mittels Yacc
|
|
- Oswalda Hofmeister
- vor 8 Jahren
- Abrufe
Transkript
1 Fachhochschule Köln Cologne University of Applied Sciences Seminar Informatik: Syntaxanalyse von DKFG mittels Yacc Jan Bollenbacher Studiengang: Master Technische Informatik Prof. Dr. Hans W. Nissen
2 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 4 2 Syntaxanalyse Parser Kontextfreie Grammatiken Top-Down-Syntaxanalyse Syntaxanalyse durch rekursiven Abstieg Prädiktive Parser Nicht-rekursive prädiktive Parser FIRST und FOLLOW Konstruktion prädikativer Parse-Tabellen LL(1)-Grammatiken Bottom-Up-Syntaxanalyse LR-Parser LR-Syntaxanalysealgorithmus LR-Grammatiken LALR-Syntaxanalysetabellen Parser-Generator Yacc 17 4 Fazit 20 Literatur 21 2
3 Abbildungsverzeichnis Tabellenverzeichnis Abbildungsverzeichnis 1 Schnittstelle Parser/Scanner Parse-Baum für Recursive-Descent-Parser Modell eines nicht-rekursiven prädiktiven Parsers Modell eines LR-Parsers Tabellenverzeichnis 1 Parse-Tabelle für eine mehrdeutige Grammatik Anwendung der Shift-Reduce-Syntaxanalyse Produktionen der Grammatik für arithmetische Ausdrücke Syntaxanalysetabelle der Grammatik für arithmetische Ausdrücke Aktionen eines LR-Parsers
4 2 SYNTAXANALYSE 1 Einleitung Wie funktioniert der Parser-Generator Yacc (Yet Another Compiler Compiler)? Das ist die grundlegende Frage die in diesem Seminar beantwortet werden soll. Dazu wird zuerst die Theorie zur Syntaxanalyse betrachtet. Es wird eine Einführung in die Syntaxanalyse von LL- bzw. LR-Grammatiken gegeben. Im Anschluss wird ein Yacc-Beispielprogramm betrachtet. Das Ziel dieser Arbeit ist, die Brücke zu schlagen von der Theorie eines LALR-Parsers zu Yacc. Dieses Seminar ist keine Beschreibung von Yacc im Allgemeinen. Die Syntax von vielen Programmiersprachen kann durch deterministische kontextfreie Grammatiken(DKFG) beschrieben werden. In der Chomsky Hierarchie benden sich die DKFG genau zwischen den regulären Sprachen und den kontextfreien Grammatiken. Wenn ein Compiler eingesetzt werden soll, ist es generell erforderlich, dass die Syntax der Sprache einer DKFG entspricht. [HU69, S. 233] 2 Syntaxanalyse 2.1 Parser Abbildung 1: Schnittstelle Parser/Scanner [Job91] In unserem Modell (Abbildung 1) liefert der Scanner dem Parser eine Folge von Symbolen (Token). Der Parser prüft dann, ob diese Symbolfolge von der Grammatik der Quellsprache erzeugt werden kann [ASU88a]. Der Scanner durchsucht also ein Eingabedokument und liefert dem Parser Token. Diese Token werden im Scanner mittels regulärer Ausdrücke deniert. Laut [ASU88a] lassen sich Parser für Grammatiken in drei Kategorien einteilen: Universelle Parse-Methoden wie z.b. die Algorithmen von Cocke-Younger-Kasami und Early, die für alle Grammatiken funktionieren, 4
5 2.2 Kontextfreie Grammatiken 2 SYNTAXANALYSE Top-Down-Parser und Bottom-Up-Parser. Auf die universellen Parse-Methoden wird im Rahmen dieser Arbeit nicht weiter eingegangen. Die Top-Down- bzw. Bottom-Up-Parser werden überwiegend in Compilern verwendet. Dabei beginnt der Top-Down-Parser, wie der Name schon sagt, die Konstruktion des Parse-Baums mit der Wurzel (Top) und setzt seine Arbeit in Richtung der Blätter (Bottom) fort. Ein Bottom-Up-Parser arbeitet sich von den Blättern zur Wurzel hoch. Beide Parser-Typen lesen die Symbole der Eingabe sukzessive von links nach rechts. [ASU88a] Die ezienten Top-Down- und Bottom-Up-Methoden sind auf Teilklassen von Grammatiken beschränkt. Einige dieser Teilklassen, z.b. LL- und LR-Grammatiken, sind jedoch mächtig genug, um die meisten syntaktischen Konstrukte in Programmiersprachen beschreiben zu können.[asu88a] 2.2 Kontextfreie Grammatiken In Programmiersprachen gibt es oft Konstrukte mit einer inhärent rekursiven Struktur. Diese lässt sich mit Hilfe kontextfreier Grammatiken denieren. [ASU88a] Beispiel 1: Wenn S1 und S2 Anweisungen sind und E ein Ausdruck ist, dann ist if E then S1 else S2 eine Anweisung. Diese Art einer bedingten Anweisung lässt sich nicht durch reguläre Ausdrücke denieren. Reguläre Ausdrücke eignen sich dazu, die lexikalische Struktur von Symbolen zu beschreiben. Beispiel 1 lässt sich in folgende Grammatik überführen. Dabei bezeichnet die syntaktische Variable stmt die Klasse der Anweisungen und expr die Klasse der Ausdrücke.[ASU88a] Beispiel 2 (Kontextfreie Sprache): stmt ::== if expr then stmt else stmt Eine kontextfreie Grammatik ist ein Quadrupel G=(N,, P, S)[Zim89]. Dieses Quadrupel besteht aus Nichtterminalen, Terminalen, Produktionen und einem Startsymbol. [ASU88a] 1. N - Nichtterminale sind syntaktische Variablen, die Mengen von Strings bezeichnen. [ASU88a] In Beispiel 2 sind stmt und expr Nichtterminale. Nichtterminale 5
6 2.3 Top-Down-Syntaxanalyse 2 SYNTAXANALYSE stehen für String-Mengen und vereinfachen die Denition der von der Grammatik erstellten Sprache. Die Nichtterminale sorgen für eine hierarchische Struktur, die für Syntaxanalyse und Übersetzung hilfreich ist.[asu88a] 2. - Terminale sind die Grundsymbole, aus denen Strings bestehen. [ASU88a] In dieser Arbeit wird für Terminal das Synonym Token benutzt. In Beispiel 2 sind die Schlüsselwörter if, then und else die Token. 3. P - Produktionen einer Grammatik geben an, wie Terminale und Nichtterminale zur Bildung von Strings miteinander kombiniert werden dürfen. [ASU88a] In Beispiel 2 ist eine Produktionsregel dargestellt. 4. S - Ein Nichtterminal einer Grammatik ist als Startsymbol deniert. Die vom Startsymbol bezeichnete String-Menge ist die von der Grammatik denierte Sprache. [ASU88a] 2.3 Top-Down-Syntaxanalyse In diesem Abschnitt werden die grundlegenden Ideen der Top-Down-Syntaxanalyse vorgestellt. Die Klasse der LL(1)-Grammatiken wird deniert. Des Weiteren wird auf nichtrekursive Implementierungen prädiktiver Parser eingegangen Syntaxanalyse durch rekursiven Abstieg Bei der Top-Down-Analyse kann man sich vorstellen, dass versucht wird eine Links- Herleitung (ersetze stehts das linkeste Nichtterminal) für einen Eingabestring zu nden. [ASU88a] Darin kann auch der Versuch gesehen werden, für die Eingabe einen Parse-Baum zu erstellen, wobei die Knoten beginnend mit der Wurzel in Vorordnung erzeugt werden. Die prädikative Syntaxanalyse, die kein Rücksetzen erfordert, ist eine spezielle Form der Syntaxanalyse durch rekursiven Abstieg.[ASU88a] An dieser Stelle wird auf eine allgemeine Form der Top-Down-Analyse eingegangen, die häug Recursive- Descent-Analyse genannt wird. Dabei ist im allgemeinen Rücksetzen, d.h. wiederholtes Lesen der gleichen Eingabe notwendig.[asu88a] Rücksetzende Parser sind jedoch relativ selten.[asu88a] Bei der Syntaxanalyse von programmiersprachlichen Konstrukten ist Rücksetzen praktisch nie notwendig.[asu88a] 6
7 2.3 Top-Down-Syntaxanalyse 2 SYNTAXANALYSE Beispiel 3 (Rücksetzen ist notwendig): Gegeben ist die folgende Grammatik: S ::== c A d A ::== ab a und der Eingabestring w = cad. Um für diese Eingabe einen Parse-Baum von oben nach unten zu erstellen, wird zunächst ein Baum der nur aus dem mit S markierten Knoten besteht erstellt. Der Eingabezeiger zeigt auf c, das erste Symbol von w. Anschlieÿend wird die erste Produktion für S angewandt und es ergibt sich der Parse-Baum in (2a). Das am weitesten Links stehende Blatt ist mit c markiert und stimmt mit dem ersten Symbol von w überein. Der Eingabezeiger wird zu dem zweiten Symbol, a vorgerückt. Es wird nun das nächste Blatt betrachtet. Die Marke A kann mit der ersten Alternative von A expandiert werden, es entsteht der Baum von Abbildung (2b). Damit kann das Zeichen a verarbeitet werden. Der Eingabezeiger zeigt nun auf das Symbol d. Das Symbol d und das Blatt b führt zu einem Widerspruch. Es muss also zu dem Blatt A zurück gekehrt werden um eine Alternative für A zu nden, die noch nicht ausprobiert wurde. Ein Rücksprung auf A erfordert auch, dass der Eingabezeiger auf die zweite Position zurück gestellt wird. Eine Prozedur muss sich also die Position bei dem ersten Aufruf von einem Unterblatt in einer lokalen Variable merken. Die zweite Alternative wird nun ausprobiert und führt zu dem Parse-Baum in Abbildung (2c). Wie man erkennen kann, stimmen die Nichtterminale mit dem Eingabewort überein. Die Prozedur stoppt und meldet den erfolgreichen Abschluss der Analyse.[ASU88a] Bei links-rekursiven Grammatiken kann es passieren, dass Recursive-Descent-Parser, auch wenn sie mit Backtracking arbeiten, in Endlosschleifen geraten. Es kann also vorkommen, dass immer wieder versucht wird, A zu expandieren, ohne dass irgendein Eingabesymbol konsumiert wurde.[asu88a] (a) S (b) S (c) S c A d c A d c A d a b a Abbildung 2: Parse-Baum für Recursive-Descent-Parser 7
8 2.3 Top-Down-Syntaxanalyse 2 SYNTAXANALYSE Prädiktive Parser Durch sorgfältigen Entwurf, Links-Faktorisierung und Elimination von Links-Rekursionen erhält man in vielen Fällen eine Grammatik, die sich für prädiktive Parser eignet, die ohne Backtracking auskommen.[asu88a] Allerdings sind prädiktive Parser nur möglich, wenn für ein Eingabesymbol a und ein Nichtterminal A zu jeder Zeit feststeht, welche Produktionsalternative von A als einzige den mit a beginnenden String herleiten kann. D.h. man kann die richtige Alternative allein durch das Aussehen des ersten Tokens bestimmen. Beispiel 4 (Kontrolluÿkonstrukte in Programmiersprachen [ASU88a]): stmt ::== if expr then stmt else stmt while expr do stmt begin stmt_list end In dem Beispiel 4 lässt sich erkennen, dass man an Hand der Schlüsselwörter if, while und begin festlegen kann welche Alternative zur erfolgreichen Herleitung einer Anweisung führen kann.[asu88a] Nicht-rekursive prädiktive Parser Rekursive Funktionen benötigen viel Speicher und sind u.u. sehr langsam. Es ist möglich, prädiktive Parser nicht-rekursiv zu implementieren.[asu88a] Der Stapel wird dabei vom Programm selber verwaltet, anstatt die implizite Stapelverwaltung im Zuge rekursiver Aufrufe zu benutzen. Der nicht-rekursive Parser inspiziert dabei das Eingabewort und generiert mit Hilfe einer Parse-Tabelle eine Produktion für ein gegebenes Nichtterminal. Abbildung 3 zeigt das Modell eines nicht-rekursiven prädiktiven Parsers. [ASU88a] Abbildung 3: Modell eines nicht-rekursiven prädiktiven Parsers.[ASU88a] 8
9 2.3 Top-Down-Syntaxanalyse 2 SYNTAXANALYSE Ein tabellengesteuerter prädiktiver Parser besteht aus einem Eingabepuer, einem Stapel, einer Parse-Tabelle und einem Ausgabestrom. [ASU88a] Der Eingabepuer enthält den zu untersuchenden String ($ als Endsymbol). Der Stapel enthält eine Folge von Grammatiksymbolen ($ als unterstes Element). Zu Beginn enthält der Stack das Bodensymbol $ und das Startsymbol der Grammatik. Die Parse-Tabelle ist ein zweidimensionaler Array M[A,a], wobei A ein Nichtterminal und a ein Terminal (oder $) ist.[asu88a] Das Programm verhält sich folgendermaÿen: Das oberste Stapelsymbol X und a, das aktuelle Eingabesymbol werden betrachtet. Es gibt drei Möglichkeiten, wie das System reagiert: 1. Wenn X = a = $ ist, stoppt der Parser und meldet den erfolgreichen Abschluss der Syntaxanalyse. 2. Wenn X = a $ ist (X ist also ein Terminal), wird das oberste Element vom Stapel entfernt und der Eingabezeiger auf das nächste Eingabesymbol gesetzt. 3. Wenn X ein Nichtterminal ist, wird aus der Parse-Tabelle M der Eintrag M [X,a] betrachtet. Dabei gibt es zwei Möglichkeiten: 1. der Eintrag ist ein Fehleintrag der Parser ruft eine Routine zur Fehlerbehandlung auf, 2. der Eintrag ist eine X-Produktion der Grammatik. Wenn etwa M [X,a] = {X UVW} ist, wird das oberste Stapelelement X durch WVU (wobei U oben liegt) ersetzt. [ASU88a] FIRST und FOLLOW Die Funktionen FIRST und FOLLOW können deniert werden, um leicht Parse-Tabellen für eine Grammatik zu erstellen. Dabei ist FIRST(α) als die Menge aller Terminale deniert, mit denen ein aus α hergeleiteter String beginnen kann. Für ein Nichtterminal A wird FOLLOW(A) als Menge aller Terminale a deniert, die in einer Satzform direkt rechts neben A stehen können.[asu88a] FOLLOW(A) ist also die Menge aller Terminale a, für die es eine Herleitung der Form S αaaβ mit beliebigen α, β gibt. Wenn A das am weitesten rechts stehende Symbol ist, dann gehört auch $ zu FOLLOW(A).[ASU88a] Auf die Regeln zur Berechnung der Mengen FIRST und FOLLOW wird an dieser Stelle verzichtet und stattdessen auf [ASU88a, Seite 230] verwiesen. 9
10 2.3 Top-Down-Syntaxanalyse 2 SYNTAXANALYSE Konstruktion prädikativer Parse-Tabellen Hat man die Mengen FIRST und FOLLOW berechnet, so ist es ein Leichtes eine prädikative Parse-Tabelle zu erstellen. Die Idee ist dabei folgende: wenn A a gilt und a ist in FIRST(α), dann expandiert der Parser A zu α, wenn a aktuelles Eingabesymbol ist. Ein Sonderfall ist α=ɛ. In diesem Fall muss A erneut zu α expandiert werden, wenn das aktuelle Eingabesymbol in FOLLOW(A) ist oder in der Eingabe die Endmarkierung $ erreicht wurde und $ in FOLLOW(A) enthalten ist. Der genaue Algorithmus ist in [ASU88a, Seite 232] beschrieben LL(1)-Grammatiken Aus den oben genannten Algorithmen lassen sich für jede Grammatik G eine Parse- Tabelle M erstellen. Es kann allerdings bei machen Grammatiken vorkommen, dass M in einer Zelle mehrere gleiche Einträge hat. Das tritt auf, wenn G links-rekursiv oder mehrdeutig ist. Eine Zelle besitzt dann mehrere Einträge.[ASU88a] Beispiel 5 (Mehrdeutige Grammatik): S ::== ietss' a S' E ::== es ɛ ::== b Die Parse-Tabelle dieser Grammatik zeigt Tabelle 1.[ASU88a] Nichtterminal Eingabesymbol a b e i t $ S S a S ietss' S' S' ɛ S' ɛ S' es E E b Tabelle 1: Parse-Tabelle M für die Grammatik aus Beispiel 5[ASU88a]. Alle leeren Felder in der Tabelle können als Error-Zustände betrachtet werden. An der Stelle M [S',e] benden sich zwei Einträge: S' ɛ und S' es. Die Grammatik ist also mehrdeutig. Bei einem Eingabesymbol e (else) ist die auszuwählende Produktion unbestimmt. Es wird eine Entscheidung zugunsten S' es getroen. Damit wird die 10
11 2.4 Bottom-Up-Syntaxanalyse 2 SYNTAXANALYSE Mehrdeutigkeit aufgelöst. Diese Wahl entspricht der Strategie, ein else dem vorhergehenden then zuzuordnen. [ASU88a] Besitzt die Parse-Tabelle einer Grammatik keine Mehrfach-Einträge, so heiÿt sie LL(1). Das erste L in LL(1) bedeutet, dass die Eingabe von links nach rechts gelesen wird; das zweite L, dass eine Links-Herleitung erzeugt wird; die 1 gibt an, dass in jedem Schritt des Parse-Prozesses ein Symbol voraus geschaut wird (Lookahead). [ASU88a] LL(1)-Grammatiken besitzen eine Reihe charakteristischer Eigenschaften. Eine mehrdeutige oder links-rekursive Grammatik kann nie LL(1) sein. Folgende Regeln müssen gelten damit eine Grammatik G LL(1) ist. Dabei gilt für je zwei Produktionen A α β von G [ASU88a]: 1. Aus α und β sind keine Strings herleitbar, die beide mit dem gleichen Nichtterminal beginnen. 2. Der leere String kann nicht sowohl aus α als auch aus β hergeleitet werden. 3. Wenn β ɛ gilt, dann beginnt kein aus α herleitbarer String mit einem Terminal aus FOLLOW(A). Es kann passieren, dass sich aus einer Grammatik G keine LL(1)-Grammatik machen lässt (siehe Beispiel 5). Die Grammatik lässt sich dennoch mit einem prädikativen Parser verarbeiten, wenn man festlegt, dass M [S',e] ={S' es} ist.[asu88a] 2.4 Bottom-Up-Syntaxanalyse In diesem Abschnitt wird die Shift-Reduce-Syntaxanalyse beschrieben. Bei der Shift- Reduce-Syntaxanalyse wird versucht ein Parse-Baum zu konstruieren, wobei man von den Blättern (bottom) beginnt und sich zur Wurzel (top) hocharbeitet. Dabei wird ein String von links nach rechts abgearbeitet und jedes bekannte Symbol auf seine Produktion reduziert, bis nur noch das Startsymbol einer Grammatik vorhanden ist.[asu88a] Beispiel 6 (Shift-Reduce-Syntaxanalyse [ASU88a]): S ::== aabe A B ::== Abc b ::== d Der Satz abbcde wird jetzt auf S reduziert. 11
12 2.5 LR-Parser 2 SYNTAXANALYSE abbcde aabcde aabcde aade Der Parser beginnt links und geht den Eingabestring bis zum ersten Vorkommen von b durch. Dieses b wird jetzt durch A ersetzt. Danach geht der Parser den String erneut durch. Er ndet die Stelle Abc die der Produktion A entspricht und ersetzt sie mit der Produktion A. aade aabe Der Parser ndet das Terminal d und ersetzt es durch B. aabe S Der Parser kann nun auf das Startsymbol S reduzieren. Tabelle 2: Anwendung der Shift-Reduce-Syntaxanalyse Es ist also durch eine Folge von vier Reduktionen möglich, abbcde auf S zu reduzieren. Tatsächlich geben diese Reduktionen in umgekehrter Reihenfolge die Rechtsableitung wieder[asu88a]: S rm aabe rm aade rm aabcde rm abbcde 2.5 LR-Parser In diesem Abschnitt soll auf eine eziente Bottom-Up-Syntaxanalysetechnik eingegangen werden, die benutzt werden kann um eine groÿe Klasse kontextfreier Grammatiken syntaktisch zu analysieren. Diese Technik wird LR(k)-Syntaxanalyse genannt; das L steht für eine Bearbeitung von links nach rechts; das R steht für die Bildung einer Rechtsableitung in umgekehrter Reihenfolge, und das k steht für den Lookahead. Wird (k) weggelassen, so kann man k =1 annehmen. Die LR-Syntaxanalyse ist aus einer Vielzahl von Gründen attraktiv[asu88a]: LR-Parser können praktisch alle Programmiersprachenkonstrukte erkennen, für die kontextfreie Grammatiken geschrieben werden können. Die LR-Syntaxanalysemethode ist die allgemeinste Shift-Reduce-Syntaxanalysemethode ohne Backtracking. Sie kann einfacher implementiert werden als andere Shift-Reduce- Methoden. Die Klasse der Grammatiken, die von der LR-Methode analysiert werden können, ist eine echte Obermenge der Klasse der Grammatiken, die mit prädiktiven Parsern analysiert werden können. Syntaxfehler können so früh wie möglich entdeckt werden, indem die Eingabe von links nach rechts abgearbeitet wird. 12
13 2.5 LR-Parser 2 SYNTAXANALYSE Der Nachteil dieser Methode ist, dass es ein zu groÿer Aufwand ist, einen LR-Parser für eine Grammatik einer typischen Programmiersprache von Hand zu konstruieren[asu88a]. Dazu wird ein spezielles Werkzeug, ein LR-Parser-Generator, benötigt. Ein Beispiel für so einen Parser-Generator ist Yacc. Der Aufbau und Gebrauch von Yacc wird in Kapitel 3 genau beschrieben.[asu88a] Grundsätzlich gibt es drei Techniken zur Konstruktion einer LR-Syntaxanalysetabelle für eine Grammatik[ASU88a]: 1. einfacher LR (kurz SLR) Ist am einfachsten zu implementieren, aber der schwächste der drei. Für bestimmte Grammatiken kann es fehlschlagen eine Syntaxanalysetabelle zu erstellen. 2. kanonische LR ist die stärkste, aber auch die teuerste Methode. 3. vorausschauende LR (kurz LALR) sie liegen in der Mächtigkeit und in den Kosten genau zwischen den beiden anderen. Die LALR-Methode arbeitet auf den meisten Grammatiken für Programmiersprachen und kann ezient implementiert werden. Yacc ist ein LALR-Parser-Generator. Tabelle 4 stellt eine solche LALR-Syntaxtabelle dar LR-Syntaxanalysealgorithmus Das Schema eines LR-Parsers ist in Abbildung 4 dargestellt. Der Parser besteht aus einer Eingabe, einer Ausgabe, einem Stack, einem Treiberprogramm und einer Syntaxtabelle. Die Syntaxtabelle besteht aus zwei Teilen: Aktion und Sprung. Das Treiberprogramm ist für alle o.g. Parser das gleiche; nur die Syntaxtabelle ändert sich von Parser zu Parser. Das Syntaxanalyseprogramm liest zeichenweise aus einem Eingabepuer. Das Programm benutzt einen Stack, um einen String in der Form s 0 X 1 s 1 X 2 s 2... X m s m zu speichern, wobei s m als oberstes Element steht. X i ist ein Grammatiksymbol und s i ist ein Symbol, das einen Zustand repräsentiert. Jedes Zustandssymbol fasst die Information zusammen, die im Stack unter ihm enthalten ist. Die Kombination aus Zustandssymbol an der Spitze des Stacks und des aktuellen Eingabesymbols wird benutzt, um die Syntaxanalysetabelle zu indizieren und Entscheidungen bei der Shift-Reduce-Syntaxanalyse zu bestimmen.[asu88a] Das Treiberprogramm des LR-Parsers verhält sich wie folgt: Es bestimmt den momentan an der Spitze des Stacks stehenden Zustand s m und das aktuelle Eingabesymbol a j. Dann 13
14 2.5 LR-Parser 2 SYNTAXANALYSE wird die Aktionstabelle konsultiert. Der Eintrag Aktion[s m, a j ], kann einen der folgenden Werte enthalten: 1. schiebe s, wobei s ein Zustand ist, 2. reduziere mit einer Grammatikproduktion A β, 3. akzeptiere und 4. Fehler Abbildung 4: Modell eines LR-Parsers.[ASU88a] Die Funktion Sprung enthält einen Zustand und ein Grammatiksymbol als Argumente und erzeugt einen Zustand. Die Sprungfunktion einer Syntaxanalysetabelle ist die Übergangsfunktion eines DEA (deterministischer endlicher Automat), der die gültigen Vorsilben von G erkennt. Die gültigen Vorsilben von G sind Vorsilben rechtsabgeleiteter Satzformen, die auf dem Stack eines Shift-Reduce-Parsers auftauchen. Der Anfangszustand dieses DEA ist der Zustand, der anfangs als oberstes Element auf dem Stack abgelegt wurde. [ASU88a] Am einfachsten macht man sich die Funktion eines LR-Parsers anhand eines Beispiels klar. Beispiel 7 (LR-Syntaxanalyseprogramm [ASU88a]): 14
15 2.5 LR-Parser 2 SYNTAXANALYSE (1) E E + T (2) E T (3) T T * F (4) T F (5) F (E) (6) F id Tabelle 3: Produktionen der Grammatik für arithmetische Ausdrücke Die Codierung der Aktionen lautet: 1. si bedeutet schieben und den Zustand i auf den Stack legen, 2. rj bedeutet mit der Produktion Nummer j reduzieren, 3. acc bedeutet akzeptieren, 4. Leereintrag bedeutet Fehler. Zustand Aktion Sprung id + * ( ) $ E T F 0 s5 s s6 acc 2 r2 s7 r2 r2 3 r4 r4 r4 r4 4 s5 s r6 r6 r6 r6 6 s5 s s5 s s6 s11 9 r1 s7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5 Tabelle 4: Syntaxanalysetabelle der Grammatik für arithmetische Ausdrücke Für die Eingabe id * id + id ist die Reihenfolge des Stackinhalts und der Eingabe in Tabelle 5 gezeigt. Das Syntaxanalyseprogramm verhält sich wie folgt: (1) Zuerst liegt der Zustand 0 auf dem Stack. Der Parser erhält die Eingabe id. Die Aktion[0,id] ist s5. s steht für shift bzw. schiebe. Bei einer Schiebeaktion wird immer das Eingabewort und der neue Zustand auf den Stack geschoben. Es wird also das Eingabewort und der neue Zustand 5 auf den Stack geschoben. 15
16 2.5 LR-Parser 2 SYNTAXANALYSE (2) Der Zustand 5 liegt jetzt an erster Stelle auf dem Stack, das Eingabewort ist *. Die Aktion[5,*] ist r6. r steht für reduce bzw. reduziere. Bei einer Reduzieraktion wird ein Terminal anhand einer Regel mit einem Nichtterminal ersetzt. Danach wird ein Sprung anhand des Nichtterminals durchgeführt. Das bedeutet also für die Aktion r6 eine Reduktion mit der Regel (6). Es wird also F id reduziert. Dazu werden zwei Symbole vom Stack heruntergeholt. Dadurch wird Zustand 0 wieder freigelegt. Der Sprung in Zustand 0 ist für das Nichtterminal F gleich 3. F und 3 werden also wieder auf den Stack gelegt. Es ergibt sich die Konguration in Zeile (3). Alle anderen Aktionen werden ähnlich bestimmt. Stack Eingabe Aktion (1) 0 id * id + id$ schiebe (2) 0 id 5 * id + id$ reduziere durch F id (3) 0 F 3 * id + id$ reduziere durch T F (4) 0 T 2 * id + id$ schiebe (5) 0 T 2 * 7 id + id$ schiebe (6) 0 T 2 * 7 id 5 + id$ reduziere durch F id (7) 0 T 2 * 7 F 10 + id$ reduziere durch T T * F (8) 0 T 2 + id$ reduziere durch E T (9) 0 E 1 + id$ schiebe (10) 0 E id$ schiebe (11) 0 E 1+ 6 id 5 $ reduziere durch F id (12) 0 E 1+ 6 F 3 $ reduziere durch T F (13) 0 E 1+ 6 T 9 $ E E + T (14) 0 E 1 $ akzeptiere Tabelle 5: Aktionen des LR-Parsers bei Eingabe von id * id + id LR-Grammatiken Es gibt kontextfreie Grammatiken, die nicht LR sind, aber diese können im allgemeinen für typische Programmiersprachkonstrukte vermieden werden. Damit eine Grammatik LR ist, reich es intuitiv, dass ein von links nach rechts arbeitender Shift-Reduce-Parser fähig ist, Handles zu erkennen, wenn diese an der Spitze des Stacks auftauchen.[asu88a] (Ein Handle eines Strings ist - informell ausgedrückt - ein Substring, der mit der rechten Seite einer Produktion übereinstimmt und dessen Reduktion zum Nichtterminalen auf der linken Seite der Produktion einem Schritt einer inversen Rechtsableitung entspricht [ASU88a].) 16
17 3 PARSER-GENERATOR YACC Es ist nicht nötig, dass ein LR-Parser den ganzen Stack abarbeitet, um zu wissen, wann der Handle an der Spitze erscheint. Das Zustandssymbol an der Spitze des Stacks enthält alle Informationen, die der Parser benötigt. Um die Shift-Reduce-Entscheidung zu unterstützen, kann der Parser auch die nächsten k Eingabesymbole betrachten. Die Fälle k =0 und k=1 sind von praktischem Interesse. Eine Grammatik, die der Parser bis zu k Eingabesymbolen bei jeder Aktion untersucht, wird LR(k)-Grammatik genannt.[asu88a] LALR-Syntaxanalysetabellen Die allgemeinsten Syntaxkonstrukte von Programmiersprachen können bequem durch eine LALR-Grammatik ausgedrückt werden. Die LALR-Technik wird in der Praxis häug benutzt um Syntaxanalysetabellen zu erstellen, da die Tabellen, die man durch sie erhält, bedeutend kleiner sind als die kanonischen LR-Tabellen. Bei einem Vergleich der Parsergröÿe haben die SLR- und LALR-Tabellen für eine Grammatik immer die gleiche Anzahl von Zuständen. Für eine Sprache wie Pascal liegt diese Gröÿe bei einigen hundert Zuständen. Die kanonische LR-Tabelle hätte typischerweise einige tausend Zustände. [ASU88a] Auf die Konstruktion von LALR-Syntaxanalysetabellen soll hier nicht weiter eingegangen werden. Die Algorithmen sind in [ASU88a, 288] zu nden. 3 Parser-Generator Yacc Grundsätzlich ist ein Yacc-Quellprogramm wie folgt aufgebaut: Listing 1: Aufbau eines Yacc-Quellprogramms 1 D e k l a r a t i o n e n 2 %% 3 U e b e r s e t z u n g s r e g e l n 4 %% 5 U n t e r s t u e t z e n d e C Routinen Die Übersetzungsregeln sind die Produktionen der umzusetzenden Grammatik. Listing 2 zeigt den Yacc-Quellcode für einfache arithmetische Ausdrücke. Die Grammatik wurde in Beispiel 7 bereits verwendet. 17
18 3 PARSER-GENERATOR YACC Listing 2: Grammatik für arithmetische Ausdrücke [Job91] 1 %{ 2 / Grammatik f u e r a r i t h m e t i s c h e Ausdruecke mit + ( ) / 3 / O r i g i n a l von F r i t z Jobst aus seinem Buch "Compilerbau ", 1992, Hanser Programmtexte 4 / i n c l u d e s und D e f i n i t i o n e n / 5 #include <s t d i o. h> 6 void y y e r r o r ( char ) ; 7 int y y p a r s e ( void ) ; 8 %} 9 / Startsymbol der Grammatik f e s t l e g e n / 10 %s t a r t expr 11 / Token der Grammatik f e s t l e g e n soweit erforderlich / 12 %token ID 13 %% / Regeln / 14 expr : 15 expr '+ ' term 16 term 17 ; 18 term : 19 term ' ' f a c t o r 20 f a c t o r 21 ; 22 f a c t o r : 23 ' ( ' expr ' ) ' 24 ID 25 ; 26 %% / Programm / 27 char yytext ; 28 int y y l e x ( void ) / Einfacher Scanner / 29 { 30 int c ; 31 while ( ( c= g e t c h a r ( ) ) == ' ' ) 32 ; 33 y y l v a l = c ; yytext = c ; 34 switch ( c ) 35 { 36 case '+ ' : case ' ' : case ' ( ' : case ' ) ' : 37 return ( c ) ; 38 case ' 0 ' : case ' 1 ' : case ' 2 ' : case ' 3 ' : case ' 4 ' : 39 case ' 5 ' : case ' 6 ' : case ' 7 ' : case ' 8 ' : case ' 9 ' : 40 y y l v a l = c ' 0 ' ; return ( ID ) ; 41 case ' $ ' : 42 return ( 0 ) ; 43 default : 44 y y e r r o r ( " U n g u e l t i g e s Symbol" ) ; e x i t ( 1 ) ; 45 } 46 } 47 main ( ) 48 { 49 y y p a r s e ( ) ; 50 } 51 void y y e r r o r ( char t e x t ) 52 { 53 p r i n t f ( "%s : z e i c h e n %c \n", t e x t, y y t e x t ) ; 54 } Yacc erstellt aus der Eingabedatei einen Parser. Mit der Operation -v erhält man eine lesbare Beschreibung des Parsers. Das Listing 3 stellt den Parser für den Yacc-Quellcode oben dar. 18
19 3 PARSER-GENERATOR YACC 1 Zustand $ a c c e p t :. expr $ end 3 ID s c h i e b e und gehe zu Zustand 1 ueber 4 ' ( ' s c h i e b e und gehe zu Zustand 2 ueber 5 expr gehe zu Zustand 3 ueber 6 term gehe zu Zustand 4 ueber 7 f a c t o r gehe zu Zustand 5 ueber 8 9 Zustand f a c t o r : ID. 11 $ d e f a u l t r e d u z i e r e mit Regel 6 ( f a c t o r ) Zustand f a c t o r : ' ( '. expr ' ) ' 15 ID s c h i e b e und gehe zu Zustand 1 ueber 16 ' ( ' s c h i e b e und gehe zu Zustand 2 ueber 17 expr gehe zu Zustand 6 ueber 18 term gehe zu Zustand 4 ueber 19 f a c t o r gehe zu Zustand 5 ueber Zustand $ a c c e p t : expr. $ end 23 1 e x p r : expr. '+ ' term 24 $ end s c h i e b e und gehe zu Zustand 7 ueber 25 '+ ' s c h i e b e und gehe zu Zustand 8 ueber Zustand e x p r : term t e r m : term. ' ' f a c t o r 30 ' ' s c h i e b e und gehe zu Zustand 9 ueber 31 $ d e f a u l t r e d u z i e r e mit Regel 2 ( expr ) Zustand t e r m : f a c t o r. 35 $ d e f a u l t r e d u z i e r e mit Regel 4 ( term ) Zustand e x p r : expr. '+ ' term 39 5 f a c t o r : ' ( ' expr. ' ) ' 40 '+ ' s c h i e b e und gehe zu Zustand 8 ueber 41 ' ) ' s c h i e b e und gehe zu Zustand 10 ueber Zustand $ a c c e p t : expr $ end. 45 $ d e f a u l t annehmen Zustand e x p r : expr '+ '. term 49 ID s c h i e b e und gehe zu Zustand 1 ueber 50 ' ( ' s c h i e b e und gehe zu Zustand 2 ueber 51 term gehe zu Zustand 11 ueber 52 f a c t o r gehe zu Zustand 5 ueber Zustand t e r m : term ' '. f a c t o r 56 ID s c h i e b e und gehe zu Zustand 1 ueber 57 ' ( ' s c h i e b e und gehe zu Zustand 2 ueber 58 f a c t o r gehe zu Zustand 12 ueber Zustand f a c t o r : ' ( ' expr ' ) '. 62 $ d e f a u l t r e d u z i e r e mit Regel 5 ( f a c t o r ) Zustand e x p r : expr '+ ' term t e r m : term. ' ' f a c t o r 67 ' ' s c h i e b e und gehe zu Zustand 9 ueber 68 $ d e f a u l t r e d u z i e r e mit Regel 1 ( expr ) Listing 3: Ausgabe von Yacc 19
20 4 FAZIT Zustand t e r m : term ' ' f a c t o r. 72 $ d e f a u l t r e d u z i e r e mit Regel 3 ( term ) Aus den Zuständen in Listing 3 kann die Parser-Tabelle rekonstruiert werden. Die so erstellte Parser-Tabelle entspricht weitestgehend der Parse-Tabelle 4. Einziger Unterschied sind andere Labels für die Zustände und ein weiterer Annehmen-Zustand (Zustand 7). 4 Fazit Als Fazit lässt sich schlieÿen, dass LALR-Parser für Syntaxkonstrukte von Programmiersprachen ausreichend sind. LALR-Syntaxtabellen sind von Hand, insbesondere für komplexere Grammatiken, schwer zu entwickeln. Deswegen wird ein Parser-Generator wie Yacc benötigt. Der Einsatz von Yacc lohnt sich allerdings nur für Sprachen, die auch wirklich DKFG sind. Für reguläre Sprachen sind andere Werkzeuge besser geeignet. Yacc wurde bereits 1970 entwickelt und wurde stehts weiter verbessert. GNU Bison ist eine Weiterentwicklung von Yacc und wird heute in Unix-artigen Betriebssystemen eingesetzt. 20
21 Literatur Literatur Literatur [ASU88a] Aho, Alfred ; Sethi, Ravi ; Ullmann, J.D.: Compilerbau Teil [ASU88b] Aho, Alfred ; Sethi, Ravi ; Ullmann, J.D.: Compilerbau Teil [GLNR92] Gardner, Jim ; Linseman, Anne ; Nicol, Scott ; Retterath, Chris: Lex & Yacc. Mortice Kern Systems, Inc., 1992 [HU69] [Job91] [SF85] Hopcroft, John E. ; Ullman, J. D.: Introduction to Automata Theory. Addison Wesley, 1969 Jobst, Fritz: Compilerbau. Von der Quelle zum professionellen Assemblertext. Hanser Fachbuchverlag, 1991 Schreiner, A. T. ; Friedman, H. G.: Compiler bauen mit UNIX e. Einf. Hanser Fachbuchverlag, 1985 [Zim89] Zima, Hans: COMPILERBAU I. Spektrum Akademischer Verlag,
Einführung - Parser. Was ist ein Parser?
Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven
Mehr2.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
MehrProgrammiersprachen 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
MehrTheoretische 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
Mehr5. Syntaxanalyse und der Parser-Generator yacc. 5.5 Aufsteigende Analyse. Absteigende Analyse versus aufsteigende Analyse. 5.5 Aufsteigende Analyse
5. Syntaxanalyse und der Parser-Generator yacc 5.1 Einleitung 5.2 Kontextfreie Grammatiken 5.3 Grundlagen von yacc 5.4 Absteigende Analyse Übersetzergenerierung Syntaxanalyse und yacc (2) Jan Bredereke,
MehrMotivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de
MehrFormale 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
MehrErstellen 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
MehrKapitel 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
MehrLineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
MehrM. 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
MehrBinä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
MehrKapiteltests zum Leitprogramm Binäre Suchbäume
Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm
MehrGrundlagen 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)
MehrTheoretische 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
MehrTheoretische 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
MehrGrundbegriffe 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
MehrKlausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
MehrProfessionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
MehrProgrammierkurs 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
MehrTheoretische 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
Mehr1 Mathematische Grundlagen
Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.
Mehr1 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
MehrZeichen bei Zahlen entschlüsseln
Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren
MehrEinführung in. Logische Schaltungen
Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von
MehrWas ist ein Compiler?
Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?
Mehrecaros2 - Accountmanager
ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf
MehrÄquivalente Grammatiken / attributierte Grammatik
Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,
MehrPrimzahlen 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
Mehr1 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
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)
MehrGrammatiken in Prolog
12. Grammatiken in Prolog 12-1 Grammatiken in Prolog Allgemeines: Gedacht zur Verarbeitung natürlicher Sprache. Dort braucht man kompliziertere Grammatiken als etwa im Compilerbau, andererseits sind die
MehrHandbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)
Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...
MehrMatrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version 1.0.0. 23. September 2015 - 1 -
Matrix42 Use Case - Sicherung und Rücksicherung persönlicher Version 1.0.0 23. September 2015-1 - Inhaltsverzeichnis 1 Einleitung 3 1.1 Beschreibung 3 1.2 Vorbereitung 3 1.3 Ziel 3 2 Use Case 4-2 - 1 Einleitung
MehrErweiterung 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
MehrZahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1
Zahlenwinkel: Forscherkarte 1 alleine Tipp 1 Lege die Ziffern von 1 bis 9 so in den Zahlenwinkel, dass jeder Arm des Zahlenwinkels zusammengezählt das gleiche Ergebnis ergibt! Finde möglichst viele verschiedene
MehrÜ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:
MehrWürfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.
040304 Übung 9a Analysis, Abschnitt 4, Folie 8 Die Wahrscheinlichkeit, dass bei n - maliger Durchführung eines Zufallexperiments ein Ereignis A ( mit Wahrscheinlichkeit p p ( A ) ) für eine beliebige Anzahl
MehrInformationsblatt Induktionsbeweis
Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln
MehrEINFACHES HAUSHALT- KASSABUCH
EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)
MehrRepetitionsaufgaben Wurzelgleichungen
Repetitionsaufgaben Wurzelgleichungen Inhaltsverzeichnis A) Vorbemerkungen B) Lernziele C) Theorie mit Aufgaben D) Aufgaben mit Musterlösungen 4 A) Vorbemerkungen Bitte beachten Sie: Bei Wurzelgleichungen
MehrKapitel 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
MehrGrammatiken. Einführung
Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische
MehrAnwendungsbeispiele Buchhaltung
Rechnungen erstellen mit Webling Webling ist ein Produkt der Firma: Inhaltsverzeichnis 1 Rechnungen erstellen mit Webling 1.1 Rechnung erstellen und ausdrucken 1.2 Rechnung mit Einzahlungsschein erstellen
MehrAnleitung über den Umgang mit Schildern
Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder
MehrHANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG
it4sport GmbH HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG Stand 10.07.2014 Version 2.0 1. INHALTSVERZEICHNIS 2. Abbildungsverzeichnis... 3 3. Dokumentenumfang... 4 4. Dokumente anzeigen... 5 4.1 Dokumente
Mehr4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:
4. AUSSAGENLOGIK: SYNTAX 4.1 Objektsprache und Metasprache 4.2 Gebrauch und Erwähnung 4.3 Metavariablen: Verallgemeinerndes Sprechen über Ausdrücke von AL 4.4 Die Sprache der Aussagenlogik 4.5 Terminologie
MehrFolge 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
MehrStellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
MehrSoftware Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
Mehr4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.
Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel
MehrHilfe Bearbeitung von Rahmenleistungsverzeichnissen
Hilfe Bearbeitung von Rahmenleistungsverzeichnissen Allgemeine Hinweise Inhaltsverzeichnis 1 Allgemeine Hinweise... 3 1.1 Grundlagen...3 1.2 Erstellen und Bearbeiten eines Rahmen-Leistungsverzeichnisses...
MehrBedienungsanleitung Anlassteilnehmer (Vereinslisten)
Bedienungsanleitung Anlassteilnehmer Dieses Programm ist speziell für Vereine entworfen. Es ist lizenzfrei verwendbar und gratis. Das Programm ist mit Excel 2010 erstellt worden und enthält VBA Programmierungen,
Mehr1. 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
MehrZur drittletzten Zeile scrollen
1 Fragen und Antworten zur Computerbedienung Thema : Zur drittletzten Zeile scrollen Thema Stichwort Programm Letzte Anpassung Zur drittletzten Zeile scrollen Scrollen VBA Excel 1.02.2014 Kurzbeschreibung:
MehrZwischenablage (Bilder, Texte,...)
Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen
MehrWindows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1
Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen
MehrSpeicher in der Cloud
Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG
Mehr4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls
4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls δ(q, a, Z) + δ(q, ɛ, Z) 1 (q, a, Z) Q Σ. Die von einem DPDA, der mit leerem Keller akzeptiert,
MehrLehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup
Universität Dortmund Lehrstuhl Informatik VI Grundzüge der Informatik * WS 28/29 Prof. Dr. Joachim Biskup Leitung der Übungen: Arno Pasternak Lösungs-Ideen Übungsblatt 6 A: Grammatiken, Syntaxdiagramme
MehrHandbuch Fischertechnik-Einzelteiltabelle V3.7.3
Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3
Mehr15 Optimales Kodieren
15 Optimales Kodieren Es soll ein optimaler Kodierer C(T ) entworfen werden, welcher eine Information (z.b. Text T ) mit möglichst geringer Bitanzahl eindeutig überträgt. Die Anforderungen an den optimalen
MehrDas RSA-Verschlüsselungsverfahren 1 Christian Vollmer
Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der
MehrDefinition von LR(k)-Grammatiken
Definition von LR(k)-Grammatiken Ziel: Ein Lookahead von k soll ausreichen um entscheiden zu können, welche Regel angewendet werden muss. Definition: FIRST k (w 1 w n ):= w 1 w k, falls n k, w 1 w n, sonst.
MehrÜbung Theoretische Grundlagen
Übung Theoretische Grundlagen Berechenbarkeit/Entscheidbarkeit Nico Döttling November 26, 2009 INSTITUT FÜR KRYPTOGRAPHIE UND SICHERHEIT KIT University of the State of Baden-Wuerttemberg and National Laboratory
MehrOutlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang
sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche
MehrProfessionelle Seminare im Bereich MS-Office
Serienbrief aus Outlook heraus Schritt 1 Zuerst sollten Sie die Kontakte einblenden, damit Ihnen der Seriendruck zur Verfügung steht. Schritt 2 Danach wählen Sie bitte Gerhard Grünholz 1 Schritt 3 Es öffnet
MehrPrü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,
Mehr10 Erweiterung und Portierung
10.1 Überblick In vielen Fällen werden Compiler nicht vollständig neu geschrieben, sondern von einem Rechnersystem auf ein anderes portiert. Das spart viel Arbeit, ist aber immer noch eine sehr anspruchsvolle
MehrExcel Pivot-Tabellen 2010 effektiv
7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes
MehrUrlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
MehrLeichte-Sprache-Bilder
Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen
MehrKonzepte der Informatik
Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens
MehrWir basteln einen Jahreskalender mit MS Excel.
Wir basteln einen Jahreskalender mit MS Excel. In meinen Seminaren werde ich hin und wieder nach einem Excel-Jahreskalender gefragt. Im Internet findet man natürlich eine ganze Reihe mehr oder weniger
MehrObjektorientierte 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
MehrFAQ Spielvorbereitung Startspieler: Wer ist Startspieler?
FAQ Spielvorbereitung Startspieler: Wer ist Startspieler? In der gedruckten Version der Spielregeln steht: der Startspieler ist der Spieler, dessen Arena unmittelbar links neben dem Kaiser steht [im Uhrzeigersinn].
Mehr1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:
Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:
MehrGeld wechseln kann als Visualisierung des Zehnerübergangs dienen. Die Zwischengrössen (CHF 2.-, 5.-, 20.-, 50.-) weglassen.
E2 Rechnungen verstehen plus minus Verständnisaufbau Geld wechseln Geld wechseln kann als Visualisierung des Zehnerübergangs dienen. Die Zwischengrössen (CHF 2.-, 5.-, 20.-, 50.-) weglassen. Ich bezahle
MehrZahlen auf einen Blick
Zahlen auf einen Blick Nicht ohne Grund heißt es: Ein Bild sagt mehr als 1000 Worte. Die meisten Menschen nehmen Informationen schneller auf und behalten diese eher, wenn sie als Schaubild dargeboten werden.
MehrErstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])
3.7 Erstellen einer Collage Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu]) Dann Größe des Dokuments festlegen beispielsweise A4 (weitere
Mehr5.2 Neue Projekte erstellen
5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort
MehrRobot Karol für Delphi
Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško
MehrInformationen zu den regionalen Startseiten
Informationen zu den regionalen Startseiten Inhaltsverzeichnis Informationen zu den regionalen Startseiten 1 1. Grundlegende Regeln 2 1.1. Was wird angezeigt? 2 1.2. Generelle Anzeigeregeln 2 2. Anpassbare
MehrSatzhilfen Publisher Seite Einrichten
Satzhilfen Publisher Seite Einrichten Es gibt verschiedene Möglichkeiten die Seite einzurichten, wir fangen mit der normalen Version an, Seite einrichten auf Format A5 Wählen Sie zunächst Datei Seite einrichten,
MehrFunktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH
Funktionsbeschreibung Lieferantenbewertung von IT Consulting Kauka GmbH Stand 16.02.2010 odul LBW Das Modul LBW... 3 1. Konfiguration... 4 1.1 ppm... 4 1.2 Zertifikate... 5 1.3 Reklamationsverhalten...
MehrKreatives Occhi. - V o r s p a n n - Alle Knoten und Knüpfelemente sowie ihre Verwendbarkeit. Die Knoten
Kreatives Occhi - V o r s p a n n - Alle Knoten und Knüpfelemente sowie ihre Verwendbarkeit Die Knoten Der Doppelknoten: Er wird mit nur 1 Schiffchen gearbeitet (s. page Die Handhabung der Schiffchen )
MehrAustausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen
Austausch- bzw. Übergangsrozesse und Gleichgewichtsverteilungen Wir betrachten ein System mit verschiedenen Zuständen, zwischen denen ein Austausch stattfinden kann. Etwa soziale Schichten in einer Gesellschaft:
MehrTheorie 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
MehrZusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten:
Zusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten: 1. Das erste Dokument drucken 2. Weitere Dokumente hinzufügen 3. Alle Dokumente
MehrBeispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis www.wir-lieben-shops.de 1
Beispiel Shop-Eintrag Ladenlokal & Online-Shop. Als Händler haben Sie beim Shop-Verzeichnis wir-lieben-shops.de die Möglichkeit einen oder mehrere Shop- Einträge zu erstellen. Es gibt 3 verschiedene Typen
MehrSerienbrieferstellung in Word mit Kunden-Datenimport aus Excel
Sehr vielen Mitarbeitern fällt es schwer, Serienbriefe an Kunden zu verschicken, wenn sie die Serienbrieffunktion von Word nicht beherrschen. Wenn die Kunden mit Excel verwaltet werden, genügen nur ein
MehrDatenbanken Kapitel 2
Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,
MehrAnwendung von Kontextfreien Grammatiken
Anwendung von Kontextfreien Grammatiken Kontextfreie Grammatiken Eine kontextfreie Grammatik (kfg) ist formal definiert als ein 4-Tupel. G = (N, T, P, S) Wobei: N: Nichtterminalsymbol / Variable T: Terminalsymbol
MehrHow to do? Projekte - Zeiterfassung
How to do? Projekte - Zeiterfassung Stand: Version 4.0.1, 18.03.2009 1. EINLEITUNG...3 2. PROJEKTE UND STAMMDATEN...4 2.1 Projekte... 4 2.2 Projektmitarbeiter... 5 2.3 Tätigkeiten... 6 2.4 Unterprojekte...
Mehr4 Aufzählungen und Listen erstellen
4 4 Aufzählungen und Listen erstellen Beim Strukturieren von Dokumenten und Inhalten stellen Listen und Aufzählungen wichtige Werkzeuge dar. Mit ihnen lässt sich so ziemlich alles sortieren, was auf einer
MehrShift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion
Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion Historie Die ersten Compiler entstanden in den 50ern.
MehrBedienungsanleitung für den Online-Shop
Hier sind die Produktgruppen zu finden. Zur Produktgruppe gibt es eine Besonderheit: - Seite 1 von 18 - Zuerst wählen Sie einen Drucker-Hersteller aus. Dann wählen Sie das entsprechende Drucker- Modell
MehrFachseminar WS 2008/09
Fachseminar WS 2008/09 Fachgebiet: Compilerbau Thema: Lexikalische Analyse (Scanner) Referent: Ali Sediq Betreuer: Prof. Dr. Helmut Weber 1 Inhaltsverzeichnis Lexikalische Analyse 1.0 Grundprobleme der
Mehr1 BEDIENUNGSANLEITUNG
1 BEDIENUNGSANLEITUNG 1.1 Kunde In diesem Fenster können die Stammdaten des Kunden eingetragen werden oder es kann eine Änderung der Stammdaten durchgeführt werden. Zusätzlich kann man auch Kunden nach
Mehr7 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