Kapitel 5: Syntax-Analyse

Ähnliche Dokumente
Konstruieren der SLR Parsing Tabelle

Fachseminar Compilerbau

5. Syntaxanalyse und der Parser-Generator yacc. 5.5 Aufsteigende Analyse. Absteigende Analyse versus aufsteigende Analyse. 5.5 Aufsteigende Analyse

Von der Grammatik zum AST

Definition von LR(k)-Grammatiken

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen

Einführung - Parser. Was ist ein Parser?

Syntaxanalyse Ausgangspunkt und Ziel

LR-Parsing. Präsentation vom 19. Dez Adriana Kosior, Sandra Pyka & Michael Weidauer. Automatische Syntaxanalyse (Parsing) Wintersemester 12/13

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Kellerautomat (1/4) Kellerautomat (2/4) Kellerautomat (3/4) Kellerautomat (4/4)

Bottom-Up Analyse. im Einzelnen

Syntax von Programmiersprachen

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Alphabet, formale Sprache

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Automaten und formale Sprachen Klausurvorbereitung

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen

2.6 Deterministisches Top-Down-Parsen

Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.

9.4 Grundlagen des Compilerbaus

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen

LR Parsing. Prinzip: Entwicklung des Parsebaums bottom up, von links nach rechts (Abb. 2.52)

Compilerbau. Einführung in Bison

1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser

Fragenkatalog 2. Abgabegespräch Formale Modellierung 3 Reguläre Sprachen

VU Software Paradigmen / SS 2014

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

Lexikalische Programmanalyse der Scanner

Formale Sprachen und Automaten

Bottom-up-Syntaxanalyse

Ein Fragment von Pascal

6 Kontextfreie Grammatiken

Formale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER

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

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 48

2.2 Syntax, Semantik und Simulation

Compiler: Parser. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Formale Sprachen. Grammatiken. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marion OSWALD. Grammatiken: Ableitung

Parsing regulärer Ausdrücke. Karin Haenelt

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Grundlagen der Theoretischen Informatik

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.

Klammersprache Definiere

LL(k)-Analyse. (y) folgt α = β. (x) = start k. (=l> ist ein Linksableitungsschritt)

Kontextfreie Sprachen werden von PDAs akzeptiert

LR-Parser, Shift-Reduce-Verfahren

Sprachen sind durch folgenden Aufbau gekennzeichnet:

LR(1) Itemmengenkonstruktion

Automatentheorie und formale Sprachen

Inhalt Kapitel 11: Formale Syntax und Semantik

Das Halteproblem für Turingmaschinen

I.5. Kontextfreie Sprachen

Übungsaufgaben zu Formalen Sprachen und Automaten

Vorlesung Programmieren

Dank. Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I. Reguläre Ausdrücke als Suchmuster für grep

Programmiersprachen und Übersetzer

Kapitel 3. Kontextfreie Sprachen. Induktive Charakterisierung der Sprache L der korrekten Klammerausdrücke: (w) L, falls w L vw L, falls v, w L

Vorlesung Automaten und Formale Sprachen Sommersemester Beispielsprachen. Sprachen

Rekursiv aufzählbare Sprachen

DisMod-Repetitorium Tag 4

Klausur zur Vorlesung Formale Sprachen und Automaten TIT03G2 mit Lösungsvorschlägen

Formale Sprachen und Grammatiken

Grundlagen der Theoretischen Informatik

Theoretische Informatik I

5.5 Aufsteigende Analyse. 5.5 Aufsteigende Analyse (2) Typische Konflikte. Konflikte

Grundlagen der Theoretischen Informatik

Informatik III - WS07/08

Sprachanalyse. Fachseminar WS 08/09 Dozent: Prof. Dr. Helmut Weber Referentin: Nadia Douiri

Das Postsche Korrespondenzproblem

Grundlagen der Theoretischen Informatik

Theoretische Grundlagen der Informatik. Vorlesung am 8. Januar INSTITUT FÜR THEORETISCHE INFORMATIK

Transkript:

Kapitel 5: Syntax-Analyse Aufgabe Die Token-Folge wird strukturiert in Anweisungen, Ausdrücke etc., um die Semantische Analyse und Code-Erzeugung zu ermöglichen Themen Kontextfreie Grammatik Äquivalente Grammatiken Top Down Analyse Bottom Up Analyse 5.1

Kontextfreie Grammatik Grundlage für die Definition von Programmiersprachen Grundlage für die Syntax-Analyse im Übersetzer Beispiel: Grammatik für Funktionsaufrufe F -> id F -> id() ->, -> num -> F Eine Ableitung F => id() => id(,) => id(num,) => id(num,f) => id(num,id) In jedem Ableitungschritt wird eine Produktion der Grammatik angewandt, d.h. ein Nonterminal wird durch eine seiner rechten Seiten ersetzt 5.2

Ableitungsbaum F => id() => id(,) => id(num,) => id(num,f) => id(num,id) F F... F id ( ) id ( ) id ( ),, num F Der Ableitungsbaum zeichnet die Ableitung auf, d.h. jede angewandte Produktion wird als Teilbaum eingetragen (Nonterminal als Wurzel, rechte Seite als Nachfolger) id 5.3

Äquivalenz von Grammatiken Zwei Grammatiken sind äquivalent, wenn sie dieselbe Sprache beschreiben Folgende Grammatiken beschreiben z.b. isten von Zahlen num,num,... G1: ->, links- und rechtsrekursiv -> num G2: ->, num linksrekursiv -> num G3: -> num, rechtsrekursiv -> num G4: -> num r restrekursiv r ->, num r r -> ε ----------------------------------------------------- G5: -> num(, num)* Regular Right Part G6: -> num{, num} Extended BNF 5.4

inks- und Rechtsrekursion Beispiel ->, -> num num, num, num num, num, num Die Grammatik ist mehrdeutig, weil es zu einer Satzform verschiedene Ableitungsbäume gibt 5.5

inks- vs. Rechtsrekursion Beispiel -> - num -> num -> num - -> num num - num - num num - num - num 8-4 - 3 8-4 - 3 5.6

Restrekursion Beispiel -> num r r -> - num r r -> ε r r num - num - num ε r 8-4 - 3 5.7

Zwei äquivalente Grammatiken für Ausdrücke inksrekursion Restrekursion S -> E <=> S -> E E -> E + T T <=> E -> T Er Er -> + T Er ε T -> T * F F <=> T -> F Tr Tr -> * F Tr ε F -> ( E ) id <=> F -> ( E ) id geeignet für BOTTOM UP Analyse geeignet für TOP DOWN Analyse 5.8

TOP DOWN Syntax-Analyse Vom Startsymbol ausgehend wird versucht, das Eingabewort abzuleiten S Eingabewort Entscheidungsproblem: Welche Produktion ist bei Alternativen anzuwenden? 5.9

FIRST- und FOOW-Mengen N First(N) Follow(N) First(N) gibt an, mit welchen Terminalen die aus N ableitbaren Satzformen beginnen können, bzw. ob N nach ε ableitbar ist Follow(N) gibt an, welche Terminalsymbole in beliebigen (aus S ableitbaren) Satzformen unmittelbar nach N folgen können, bzw. ob $ folgen kann 5.10

Grammatik TOP DOWN Analyse-Tabelle S -> E $ First(S)={id,(} E -> T Er First(E)={id,(} Er -> + T Er ε First(Er)={+,ε} Follow(Er)={),$} T -> F Tr First(T)={id,(} Tr -> * F Tr ε First(Tr)={*,ε} Follow(Tr)={),+,$} F -> ( E ) id First(F)={id,(} Analyse-Tabelle: (Ziel,Eingabesymbol) -> neue Ziele id ( ) + * $ S E E.... E T Er T Er.... Er.. ε + T Er. ε T F Tr F Tr.... Tr.. ε ε * F Tr ε F id ( E ).... 5.11

Ablauf einer TOP DOWN Analyse id ( ) + * $ S E E.... E T Er T Er.... Er.. ε + T Er. ε T F Tr F Tr.... Tr.. ε ε * F Tr ε F id ( E ).... Keller Eingabe Produktion (neue Ziele) $ S id + id * id $ S -> E $ E id + id * id $ E -> T Er $ Er T id + id * id $ T -> F Tr $ Er Tr F id + id * id $ F -> id $ Er Tr id id + id * id $ match id $ Er Tr + id * id $ Tr -> ε (nicht: Tr -> * F Tr) $ Er + id * id $ Er -> + T Er (nicht: Er -> ε) $ Er T + + id * id $ match + $ Er T id * id $ T -> F Tr $... 5.12

Rekursive Syntax-Prozeduren Für jede Zeile der Tabelle (Nonterminal) wird eine Prozedur gebildet id ( ) + * $ S E E.... E T Er T Er.... Er.. ε + T Er. ε T F Tr F Tr.... Tr.. ε ε * F Tr ε F id ( E ).... void E() { if (sym=id sym='(') {T();Er();} else Error(); } void Er() { if (sym='+'){nextsym();t();er();} else if (sym=')' sym='$'){} else Error(); } 5.13

(1)-Grammatik Eine (1)- Grammatik erlaubt eine deterministische TOP DOWN Analyse [von inks nach rechts mittels inksableitung und 1 Symbol Vorausschau] Jede (1)-Grammatik hat eine eindeutige Analyse-Tabelle Jede (1)-Grammatik erfüllt folgende Bedingung: Für jede Produktion N -> α 1 α 2 gilt 1. First(α i ) First(α j ) = {} f.a. i,j (i j) 2. höchstens ein α i läßt sich nach ε ableiten 3. falls α i =*=> ε, dann First(α j ) Follow(N) = {} f.a. j i Gegenbeispiel: A -> A a b First(A a) First(b) = {b} {} inksrekursive Produktionen sind nicht zur TOP DOWN Analyse geeignet 5.14

BOTTOM UP Syntax-Analyse Vom Eingabewort ausgehend wird versucht, zum Startsymbol zu reduzieren S Eingabewort Entscheidungsproblem: Reduzieren oder Weiterlesen? 5.15

Grammatik (linksrekursiv) S -> E E -> E + T T T -> T * F F F -> ( E ) id Keller Eingabe Aktion Ablauf einer BOTTOM UP Analyse $ id + id * id $ shift id $ id + id * id $ reduce F -> id $ F + id * id $ reduce T -> F $ T + id * id $ reduce E -> T $ E + id * id $ shift + (nicht: reduce S -> E) $ E + id * id $ shift id $ E + id * id $ reduce F -> id $ E + F * id $ reduce T -> F $ E + T * id $ shift * (nicht: reduce E -> E + T) $ E + T * id $ shift id $ E + T * id $ reduce F -> id $ E + T * F $ reduce T -> T * F $ E + T $ reduce E -> E + T $ E $ reduce S -> E $ S $ accept 5.16

Analysezustand und Item N? α ω? Keller Eingabe N α. ω 5.17

Items Ein Item N α. ω ist eine Produktion, die einem Analysezustand zugeordet ist: Um N abzuleiten, wurde bereits α abgeleitet und ω muß noch abgeleitet werden Fallunterscheidungen für ω (1) N α. aβ Aktion shift, falls a in der Eingabe (2) N α. Aktion reduce, falls ein Element aus Follow(N) in der Eingabe (3) N α. Aβ mit A γ Um A abzuleiten, muß γ abgeleitet werden, d.h. A. γ ist dem gleichen Zustand zugeordnet (Zustand = Item-Menge) 5.18

Konstruktion der Item-Mengen Grammatik (0) S -> E (1) E -> E op T (2) E -> T (3) T -> ( E ) (4) T -> id Item-Mengen - -- I0 = { S ->. E E ->. E op T E ->. T T ->. ( E ) T ->. id } --- I1 = { S -> E. I1 = goto(i0,e) E -> E. op T } -- - I2 = { E -> T. } I2 = goto(i0,t) --- I3 = { T -> (. E ) I3 = goto(i0,() E ->. E op T... 5.19

BOTTOM UP Analyse-Tabellen Item-Mengen (Ausschnitt) --- I1 = { S -> E. I1 = goto(i0,e) E -> E. op T } -- - I2 = { E -> T. } I2 = goto(i0,t) --- action-tabelle goto-tabelle state id op ( ) $ id op ( ) E T 0 s. s.. 4. 3. 1 2 1. s.. r0. 5.... 2. r2. r2 r2...... 3 s. s.. 4. 3. 6 2 4. r4. r4 r4...... 5 s. s.. 4. 3.. 7 6. s. s.. 5. 8.. 7. r1. r1 r1...... 8. r3. r3 r3...... 5.20

action-tabelle Ablauf einer BOTTOM UP Analyse goto-tabelle state id op ( ) $ id op ( ) E T 0 s. s.. 4. 3. 1 2 1. s.. r0. 5.... 2. r2. r2 r2...... 3 s. s.. 4. 3. 6 2 4. r4. r4 r4...... 5 s. s.. 4. 3.. 7 6. s. s.. 5. 8.. 7. r1. r1 r1...... 8. r3. r3 r3...... Keller Eingabe Aktion 0 id op id op id $ s 0 4 op id op id $ r4 (T -> id) 0 2 op id op id $ r2 (E -> T) 0 1 op id op id $ s 0 1 5 id op id $ s 0 1 5 4 op id $ r4 (T -> id) 0 1 5 7 op id $ r1 (E -> E op T) 0 1 op id $ s... 5.21

R(1)-Grammatik Eine R(1)- Grammatik erlaubt eine deterministische BOTTOM UP Analyse [von inks nach rechts mittels Rechtsableitung und 1 Symbol Vorausschau] Jede R(1)-Grammatik hat eine eindeutige Analyse-Tabelle (action/goto) R-Verfahren sind mächtiger als -Verfahren in Bezug auf die Grammatiken, die sie verarbeiten können R(1) (1) 5.22

%token %left %token %start %% ASSIGNOP PUSASSIGNOP PUSOP REGISTER NUMBER ';' stmt Bison Beispiel stmt : REGISTER ASSIGNOP expr ';' REGISTER PUSASSIGNOP expr ';' ; expr : REGISTER constexpr ; constexpr: NUMBER constexpr PUSOP constexpr ; %% int yyerror(char *e) { printf("parser error: '%s'...\n", e); exit(2); } int main(void) { yyparse(); return 0; } 5.23