ScholarGate
Assistent

Lexikalische und syntaktische Analyse

Lexikalische und syntaktische Analyse bilden das Frontend eines Compilers, indem sie den Quelltext in Tokens zerlegen und seine grammatikalische Struktur als Parse- oder Syntaxbaum erkennen.

Thema finden mit PaperMindDemnächstFind papers & topics
Tools & resources
Folien herunterladen
Learn & explore
VideoDemnächst

Definition

Die lexikalische Analyse ist die Phase, die Eingabezeichen zu Tokens gruppiert, und die syntaktische Analyse (Parsing) ist die Phase, die bestimmt, ob und wie diese Tokens gemäß einer Grammatik ein gültiges Programm bilden, und dabei einen Syntaxbaum erzeugt.

Scope

Dieses Thema behandelt die lexikalische Analyse, die Zeichenströme mithilfe regulärer Sprachen und endlicher Automaten in Tokens umwandelt, sowie die syntaktische Analyse (Parsing), die die Phrasenstruktur eines Programms anhand einer kontextfreien Grammatik erkennt. Es umfasst Top-Down- (LL) und Bottom-Up- (LR) Parsing, Parser-Generatoren, Ambiguität und Fehlerbehandlung sowie die Konstruktion abstrakter Syntaxbäume.

Core questions

  • Wie werden reguläre und kontextfreie Sprachen zur Beschreibung der Programmstruktur verwendet?
  • Welche Kompromisse gibt es zwischen LL- und LR-Parsing?
  • Wie werden Ambiguität und Parsing-Fehler erkannt und behandelt?
  • Wie wird ein abstrakter Syntaxbaum aus einem Token-Strom erstellt?

Key theories

LR-Parsing
Knuth führte das LR-Parsing ein, eine Bottom-Up-Technik, die die breite Klasse der LR-Grammatiken in linearer Zeit deterministisch parst und die Grundlage vieler Parser-Generatoren bildet.
Allgemeines kontextfreies Parsing
Earleys Algorithmus parst beliebige kontextfreie Grammatiken, einschließlich ambiger, und bietet eine allgemeine Methode, wenn eingeschränkte deterministische Parser unzureichend sind.
Reguläre und kontextfreie Grundlagen des Frontends
Das Dragon Book systematisiert die Verwendung regulärer Ausdrücke und endlicher Automaten für das Scannen und kontextfreier Grammatiken für das Parsing, einschließlich der Standard-LL- und LR-Konstruktionsalgorithmen.

Clinical relevance

Lexing und Parsing sind nicht nur für Compiler, sondern auch für Interpreter, Linter, Formatierer, IDEs und Datenformatprozessoren von grundlegender Bedeutung. Robustes Parsing mit guter Fehlerbehandlung ist für die Entwicklererfahrung jeder Sprachwerkzeugkette unerlässlich.

History

Chomskys Hierarchie der formalen Sprachen in den späten 1950er Jahren lieferte die Theorie der regulären und kontextfreien Sprachen. Knuth formalisierte das LR-Parsing 1965, und Earley entwickelte 1970 einen allgemeinen kontextfreien Algorithmus. Parser-Generatoren wie yacc machten das LR-Parsing praktikabel, während spätere Arbeiten Parsing Expression Grammars und kombinatorbasierte Parser untersuchten.

Debates

Generierte versus handgeschriebene Parser
Praktiker diskutieren den Einsatz von Parser-Generatoren aus formalen Grammatiken, die prägnant und verifizierbar sind, gegenüber handgeschriebenen rekursiven Abstiegsparsern, die oft bessere Fehlermeldungen und mehr Kontrolle auf Kosten von mehr Code bieten.

Key figures

  • Donald Knuth
  • Jay Earley
  • Alfred Aho
  • Noam Chomsky

Related topics

Seminal works

  • knuth1965
  • earley1970
  • aho2006

Frequently asked questions

Was ist der Unterschied zwischen einem Lexer und einem Parser?
Ein Lexer gruppiert Rohzeichen zu Tokens wie Bezeichnern und Operatoren, während ein Parser diese Tokens gemäß der Grammatik der Sprache zu einem hierarchischen Syntaxbaum anordnet.
Was ist der Unterschied zwischen LL- und LR-Parsing?
LL-Parser arbeiten Top-Down und prognostizieren Produktionen aus dem Eingabepräfix, während LR-Parser Bottom-Up arbeiten und erkannte Teilzeichenketten reduzieren; LR verarbeitet eine streng größere Klasse von Grammatiken, ist aber komplexer zu konstruieren.

Methods for this concept

Related concepts