Unterseite-nach oben Parser


Advertisements

Bottom-up-Parsing beginnt von den Blattknoten des Baumes und arbeitet in Richtung nach oben, bis sie den Wurzelknoten erreicht. Hier start wir von einem Satz und wenden Sie dann den Produktionsvorschriften in umgekehrter Weise, um das Startsymbol zu erreichen. Die unten angegebenen Bild zeigt die Bottom-up-Parser zur Verfügung.

Bottom-Up Parsing

Umschalttaste Reduzieren Parsing

Umschalttaste reduzieren Parsen verwendet zwei einzigartige Schritte für Bottom-up-Analyse. Diese Schritte werden bekannt als Shift-Stufen und reduzieren Schritt.

  • Umschalt Schritt : Die Verschiebung Schritt bezieht sich auf die Weiterentwicklung der Eingabezeiger auf das nächste Eingabesymbol, die aufgerufen wird das verschoben Sinnbild. Dieses Zeichen wird auf dem Stapel abgelegt. Das verschobene Symbol ist als einen einzelnen Knoten des Parserbaums behandelt.

  • Reduzieren Schritt : Wenn der Parser findet eine komplette Grammatikregel (RHS) und ersetzt es zu (LHS), es ist als reduzieren Schritt bekannt. Dies geschieht, wenn das obere Ende des Stapels enthält einen Griff. Um zu reduzieren, ein POP-Funktion wird durchgeführt auf dem Stapel, welche aus Pop weg den Griff und ersetzt sie durch LHS Nicht-Terminalsymbol.

LR Parser

Der LR-Parser ist eine nicht-rekursive, Schicht reduzieren, Bottom-up-Parser. Es verwendet eine breite Klasse von kontextfreie Grammatik, die er der effizienteste Syntaxanalyse Technik macht. LR Parser sind auch als LR (k) Parser, worin L Stände für links-nach-rechts-Abtastung des Eingangsstroms ; R steht für die Konstruktion von äußerst rechte Ableitung in umgekehrter Richtung, und k bezeichnet die Anzahl der Symbole, um Entscheidungen zu treffen.

Es gibt drei verbreiteten AlgorithmenVerfügung für den Aufbau eines LR-Parser:

  • SLR (1) - Einfache LR Parser:
    • Funktioniert auf kleinste Klasse der Grammatik
    • wenige Reihe von Staaten, also sehr kleine Tabelle
    • Einfach und schnelle Bau
  • LR(1) – LR Parser:
    • Funktioniert auf komplette Reihe von LR (1) Grammatik
    • Erzeugt großen Tisch und große Anzahl von Staaten
    • Langsam Bau
  • LALR(1) – vorausschauen LR Parser:
    • Funktioniert auf Zwischen- Größe der Grammatik
    • Anzahl der Zustände sind dieselben wie in SLR (1)

LR-Parsing-Algorithmus

Hier beschreiben wir ein Skelett eines Algorithmus LR-Parser:

token = next_token()

repeat forever
   s = top of stack
   
   if action[s, token] = “shift si” then
      PUSH token
      PUSH si 
      token = next_token()
      
   else if action[s, tpken] = “reduce A::= β“ then 
      POP 2 * |β| symbols
      s = top of stack
      PUSH A
      PUSH goto[s,A]
      
   else if action[s, token] = “accept” then
      return
      
   else
      error()

LL vs. LR

LL LR
Tut eine Linksableitung. tut eine Rechtsableitung in umgekehrter.
Start mit der Wurzel Nichtterminal auf den Stapel. Endet mit dem Root-Nichtterminal auf den Stapel.
Endet wenn der Stapel leer ist. Startet mit einem leeren Stack.
Verwendet die Stapel für nende, was immer noch zu erwarten ist. Verwendet den Stack für die Benennung, was ist bereits gesehen.
Erstellt die Syntaxbaum von oben nach unten. Erstellt die Parse-Baum von unten nach oben.
Kontinuierlich pops ein Nichtterminal ausgeschaltet die Stapel, und drückt den entsprechenden rechten Seite. Versucht eine rechte Seite auf dem Stack zu erkennen, pops es, und schiebt den entsprechenden Non-Terminal.
Erweitert die nicht-Terminals. Reduziert die nicht-Terminals.
Liest die Klemmen, wenn es pops eine ausgeschaltet Stapel. Liest die Klemmen während es schiebt sie auf die Stapel.
Pre-order Traversierung des Parse-Baum. Post-Order Traversierung der Parse-Baum.
Advertisements