WISSENSARTIKEL / PROGRAMMIERUNG & ENTWICKLUNG

Recursive Descent Parsing

Eine Methode der syntaktischen Analyse in der Programmierung

◎ KURZDEFINITION

Recursive Descent Parsing Recursive Descent Parsing ist ein top-down Parsing-Verfahren, bei dem die Grammatikregeln durch rekursive Funktionen implementiert werden, um die Struktur eines Eingabestrings zu erkennen.

Eigenständig verständliche Definition
✦

Das Wichtigste auf einen Blick

  • Recursive Descent Parsing ist ein top-down Parsing-Verfahren, das rekursive Funktionen nutzt.
  • Es eignet sich besonders für LL(1)-Grammatiken ohne Linksrekursion.
  • Die Implementierung ist einfach und gut lesbar, was es für Bildungszwecke beliebt macht.
  • Linksrekursion muss vor der Implementierung eliminiert werden, da sie zu Endlosschleifen führt.
  • Recursive Descent Parser können leicht erweitert und angepasst werden.
  • Das Verfahren ist nicht für alle kontextfreien Grammatiken geeignet, insbesondere nicht für solche mit Linksrekursion oder Mehrdeutigkeit.
01

Überblick: Recursive Descent Parsing

Recursive Descent Parsing ist eine einfache und intuitive Methode zur syntaktischen Analyse von Programmiersprachen. Es basiert auf der Idee, dass jede Nichtterminalregel einer Grammatik durch eine eigene rekursive Funktion repräsentiert wird. Das Verfahren wird häufig im Compilerbau verwendet, um Quellcode in eine abstrakte Syntaxstruktur zu überführen. Recursive Descent Parser sind leicht zu implementieren und gut verständlich, haben jedoch Einschränkungen bei der Handhabung bestimmter Grammatiktypen.

02

Was ist Recursive Descent Parsing?

Recursive Descent Parsing ist ein Parsing-Verfahren, bei dem jede Regel einer kontextfreien Grammatik durch eine rekursive Funktion dargestellt wird. Diese Funktionen versuchen, die Eingabezeichenkette entsprechend der Grammatik zu analysieren und zu zerlegen.

03

Funktionsweise des Recursive Descent Parsers

Der Parser beginnt mit der Startregel der Grammatik und ruft rekursiv Funktionen für die einzelnen Nichtterminalsymbole auf. Jede Funktion versucht, die Eingabe gemäß ihrer Regel zu erkennen. Wenn ein Teil der Eingabe nicht passt, wird ein Fehler zurückgegeben oder ein alternativer Pfad versucht.

04

Voraussetzungen und Einschränkungen

Recursive Descent Parsing funktioniert am besten mit LL(1)-Grammatiken, die keine Linksrekursion enthalten. Linksrekursive Regeln müssen vor der Implementierung umgeschrieben werden, da sie zu unendlichen Rekursionen führen. Außerdem ist das Verfahren nicht für alle kontextfreien Grammatiken geeignet, insbesondere bei Mehrdeutigkeit.

05

Vergleich von Parsing-Verfahren

Parsing-VerfahrenTypVorteileNachteile
Recursive Descent ParsingTop-downEinfach, gut verständlichProbleme mit Linksrekursion
LL-ParserTop-downAutomatisierbar, effizientBegrenzte Grammatikunterstützung
LR-ParserBottom-upUmfangreiche GrammatikunterstützungKomplexe Implementierung
06

Implementierungsschritte

1. Grammatik analysieren und Linksrekursion entfernen.
2. Für jede Nichtterminalregel eine rekursive Funktion schreiben.
3. Funktionen so gestalten, dass sie Eingabezeichen konsumieren und Erfolge oder Fehler zurückgeben.
4. Startregel als Einstiegspunkt definieren.
5. Fehlerbehandlung und Rückverfolgung implementieren.

07

Beispiel einer rekursiven Funktion für eine Grammatikregel

✦

Für die Regel Expr -> Term '+' Expr | Term könnte die Funktion wie folgt aussehen:

function parseExpr() {
parseTerm();
if (nextToken == '+') {
consume('+');
parseExpr();
}
}

08

Vor- und Nachteile von Recursive Descent Parsing

VorteileNachteile
Einfache ImplementierungNicht geeignet für Linksrekursion
Leicht verständlich und wartbarKann ineffizient sein bei komplexen Grammatiken
Flexibel und erweiterbarNicht alle Grammatiken können geparst werden
09

Wichtig

✦

Recursive Descent Parsing ist ideal für einfache und klar strukturierte Grammatiken. Für komplexere Sprachen sind oft andere Parsing-Techniken oder Parsergeneratoren besser geeignet.

◇

Zusatzinformationen

◇

Begriff: Recursive Descent Parsing

Typ: Top-down Parser

Verfahren: Rekursive Funktionen zur Regelimplementierung

Einsatzgebiet: Compilerbau, Interpreterentwicklung

Vorteile: Einfachheit, Lesbarkeit, Erweiterbarkeit

Nachteile: Probleme mit Linksrekursion, nicht für alle Grammatiken geeignet

Alternativen: LL-Parser, LR-Parser, Parsergeneratoren

Aa

Synonyme und alternative Bezeichnungen

?

Häufige Fragen zu Recursive Descent Parsing

Was ist der Hauptvorteil von Recursive Descent Parsing?

Der Hauptvorteil liegt in der einfachen Implementierung und guten Lesbarkeit, da die Grammatikregeln direkt in rekursive Funktionen übersetzt werden.

Warum ist Linksrekursion bei Recursive Descent Parsing problematisch?

Linksrekursion führt zu unendlichen Rekursionen, da die Funktion sich selbst ohne Fortschritt immer wieder aufruft.

Kann Recursive Descent Parsing alle kontextfreien Grammatiken parsen?

Nein, es ist hauptsächlich für LL(1)-Grammatiken geeignet und kann nicht mit allen kontextfreien Grammatiken umgehen, insbesondere bei Linksrekursion oder Mehrdeutigkeit.

Wie kann man Linksrekursion eliminieren?

Linksrekursion kann durch Umformung der Grammatik in eine rechtsrekursive Form oder durch Einführung neuer Regeln entfernt werden.

Welche Alternativen gibt es zum Recursive Descent Parsing?

Alternativen sind LL-Parser, LR-Parser und Parsergeneratoren wie Yacc oder ANTLR.

Ist Recursive Descent Parsing für den Einsatz in produktiven Compilern geeignet?

Es wird häufig für einfache oder pädagogische Zwecke genutzt, in produktiven Compilern kommen oft leistungsfähigere Parser zum Einsatz.

Wie behandelt ein Recursive Descent Parser Fehler im Quelltext?

Fehlererkennung erfolgt meist durch Rückgabe von Fehlercodes oder Exceptions, die eine Rückverfolgung und Fehlerbehandlung ermöglichen.

▤

Quellen & weiterführende Informationen

Quellenvorschläge und Nachweise zum Artikel. Bitte externe Inhalte eigenständig prüfen.

3 Quellen
  1. 01
    Compilers: Principles, Techniques, and Tools ↗
    Pearson· Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman· BuchKI-Vorschlag · ungeprüft

    Standardwerk zum Thema Compilerbau und Parsing-Techniken.

    https://www.pearson.com/us/higher-education/program/Aho-Compilers-Principles-Techniques-and-Tools-2nd-Edition/PGM310927.html
  2. 02
    Parsing Techniques: A Practical Guide ↗
    Springer· Dick Grune, Ceriel J.H. Jacobs· FachbuchKI-Vorschlag · ungeprüft

    Umfassende Darstellung verschiedener Parsing-Techniken inklusive Recursive Descent.

    https://www.springer.com/gp/book/9781441919017
  3. 03
    Recursive Descent Parsing – Grundlagen und Beispiele ↗
    Wikipedia· Gemeinschaft· Online-EnzyklopädieKI-Vorschlag · ungeprüft

    Einführender Artikel mit Beispielen und Erklärungen.

    https://de.wikipedia.org/wiki/Recursive_Descent_Parser

Artikel teilen oder einbetten

Teile diesen Wissensartikel oder binde eine kompakte Vorschau auf deiner eigenen Website ein.

f Facebookin LinkedIn𝕏 X◉ WhatsApp
War dieser Artikel hilfreich?Dein Feedback hilft, die Wissensplattform zu verbessern.
ANSWER ENGINE · ARTIKEL

Diese Seite in Zahlen

Artikelstatistik
↗–Aufrufe dieses Artikels
◷–Unique Nutzer letzte 24 Stunden
◉–Unique Nutzer heute
▦–Unique Nutzer diesen Monat
Feedback zu diesem Artikel
👍 Ja
0
◐ Teilweise
0
👎 Nein
0

Alle Werte in diesem Abschnitt beziehen sich ausschließlich auf diesen Artikel.

ANSWER ENGINE · GESAMTES NETZWERK

Wissensplattform in Zahlen

Netzwerkstatistik
↗–Seitenaufrufe gesamt
◷–Unique Nutzer letzte 24 Stunden
◉–Unique Nutzer heute
▦–Unique Nutzer diesen Monat

Diese Werte beziehen sich auf die gesamte Plattform und alle veröffentlichten Artikel.