750 likes | 893 Views
Syntaktische Analyse – Bottom-up. Im Rahmen des Seminars „Übersetzung von künstlichen Sprachen“. Gliederung. 1. Grundlagen der Bottom-Up-Syntaxanalyse 2. Operator-Precedence-Syntaxanalyse 3. LR-Syntaxanalyse 3.1 LR-Syntaxanalysealgorithmus 3.2 LR(0) 3.3 SLR(1)
E N D
Syntaktische Analyse – Bottom-up Im Rahmen des Seminars „Übersetzung von künstlichen Sprachen“
Gliederung 1. Grundlagen der Bottom-Up-Syntaxanalyse 2. Operator-Precedence-Syntaxanalyse 3. LR-Syntaxanalyse 3.1 LR-Syntaxanalysealgorithmus 3.2 LR(0) 3.3 SLR(1) 3.4 LR(1) 3.5 LALR(1) 4. Zusammenfassung
Regel 1: S → aABe Regel 3: B → d Regel 2: A → Abc Regel 2: A → b Einführung in die Bottom-Up-Syntaxanalyse • Ziel: Anwendung von Reduktionsschritten, um von der Eingabe auf das Startsymbol S zu reduzieren
Einführung in die Bottom-Up-Syntaxanalyse Anwendung einer umgekehrten Rechtsableitung Problem: Bestimmung von Handles (rechte Seiten von Regeln, die reduziert werden können, um vorhergehenden Schritt der Rechtsableitung zu erhalten) S S→ aABe B B→ d A A → Abc A Idee: Nutzung eines Stacks A → b a b b c d e
Syntaxanalyse mit einem Stack Shift: Inputsymbol auf den Stack schieben (bis Handle erscheint)
Syntaxanalyse mit einem Stack Reduce: reduzieren des Handle
Syntaxanalyse mit einem Stack Accept: Eingabe entsprach der Grammatik erfolgreiches Ende
Operator-Precedence-Syntaxanalyse • Definition von Relationen zwischen dem obersten Stackelement und dem ersten Eingabesymbol (begrenzt auf Terminalsymbole) • Vorgehen: • < oder =: Shift • >: Reduce • Handles werden erkannt: • <: linke Markierung des Handle • >: rechte Markierung des Handle $ <• id •> + <• id •> * <• id•> $ Erstes Handle
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Ablauf OP-Parser Input Stack
Operator-Grammatik • Grammatik muss folgende Bedingungen erfüllen, damit sie mit OP-Parser behandelt werden kann: • Keine zwei aufeinander folgenden Nichtterminale auf der rechten Seite einer Produktion. • Keine Produktion mit gleicher rechter Seite. • Keine ε-Produktionen. sehr schwaches Verfahren!
LR-Syntaxanalyse • LR(k)-Syntaxanalyse: • L: left-to-right-parse • R: rightmost derivation: Rechtsableitung • k: k-token lookahead: Anzahl im Voraus betrachteter Inputsymbole Quelle: Appel, Palsberg (2002).
Modell eines LR-Parsers Syntaxanalyse-tabelle Action[sm,ai] = shift s | reduce A β | accept | error. Goto[s‘, A] Input Syntaxbaum Terminalsymbole Output LR-Syntaxanalyse-Programm Stack
LR-Syntaxanalysetabelle-Konstruktion • Allgemeines Vorgehen: • Erstellen von: • „Dummy-Produktion“: S‘ S (S ist altes Startsymbol). • Endlichem Automat. • Syntaxanalysetabelle.
Erstellen eines Zustandsübergangsgraphen Grundbegriffe: • Items: Produktionen mit Markierungspunkt auf rechter Seite; zeigt an wie weit man im Parseprozess vorangeschritten ist. • A •XYZ • A X•YZ • A XY•Z • A XYZ• • Closure-Operation: fügt weitere Items zu einer Menge von Items hinzu. • Goto-Operation: Definiert Zustandsübergänge zwischen Mengen von Items/Zuständen des Automaten.
E •E+T E •T Erstellen eines Zustandsübergangsgraphen Closure-Operation anwenden! S •E S E• S E+ •T E E•+T T •id E + T •id I0 I1 I4 id id T T E T• E E+T• T id• I2 I3 I5
Erstellen einer LR(0)-Syntaxanalysetabelle • Punkt am rechten Ende eines Items • Falls Dummy-Item: Accept • Sonst Reduce • I J, mit X Terminalsymbol: Shift • I J, mit X Nichtterminalsymbol: Goto
E •E+T E •T Erstellen der LR(0)-Syntaxanalysetabelle S •E S E• S E+ •T E E•+T T •id E + T •id I0 I1 I4 id id T T E T• E E+T• T id• I2 I3 I5