Zum Inhalt springen

LL-Parser

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 22. September 2005 um 14:48 Uhr durch Sparti (Diskussion | Beiträge) (kat). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Vorlage:Stub

Ein LL-Parser ist ein Top-Down-Parser, der die Eingabe von links nach rechts abarbeitet, um die Linksableitung der Eingabe zu berechnen.

Ein LL-Parser heißt LL(k)-Parser, wenn er während des Parsens k Token vorausschauen kann. k wird dabei als lookahead bezeichnet. Diesem Parsertyp liegen die LL(k)-Grammatiken zu Grunde. Die meisten heute benutzten LL(k)-Parser sind LL(1)-Parser.

LL(k) steht dabei für left-to-right parse, leftmost derivation, k symbols lookahead.

Obwohl die LL(k)-Grammatiken relativ eingeschränkt sind, werden LL(k)-Parser gern benutzt. Die Entscheidung, nach welcher Regel expandiert wird, kann allein durch Analyse des lookahead getroffen werden. Eine einfache Möglichkeit zur Implementierung dieser Parsertechnik bietet Rekursiver Abstieg.

Funktionsweise

Der Parser arbeitet mit einem Zustand Q=(K,E,A), welcher sich so zusammensetzt:

  • K ist ein Laufzeitkeller, der für die Speicherung der aktuellen Symbole verwendet wird
  • E ist die Eingabe, die noch nicht gelesen wurde
  • A stellt die Ausgabe dar.

Der nicht-deterministische Automat für die LL(k)-Analyse ist dann:

  • A=(Q,,D,F)

Dabei ist S das Startsymbol der zugrundeliegenden Grammatik und z die Linksanalyse der Eingabe E.

Die Transitionen D setzen sich so zusammen:

  • (shift- oder Verschiebeschritt)
  • (Expansions- oder Ableitungsschritt), wobei dann die Regel in den Produktionen enthalten sein muß und die Nummer der Produktion i ist.

LL(1) Parser

Dieser Parsertyp verwendet einen Lookahead von einem Zeichen. Auf Grund dieser Einschränkung kann einfach ein deterministischer Parser erstellt werden.

Die o.g. nicht-deterministischen Schritte werden von hier durch den Lookahead determiniert.

Siehe auch