<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parser</id>
	<title>Parser - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parser"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parser&amp;action=history"/>
	<updated>2026-05-21T21:33:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Parser&amp;diff=51883&amp;oldid=prev</id>
		<title>imported&gt;Aka: /* Parser für kontextfreie Grammatiken */ doppelten Link entfernt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parser&amp;diff=51883&amp;oldid=prev"/>
		<updated>2026-04-28T19:55:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Parser für kontextfreie Grammatiken: &lt;/span&gt; doppelten Link entfernt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Parser&amp;#039;&amp;#039;&amp;#039; [{{IPA|ˈpɑːʁzɐ}}] ({{enS|to parse}} „analysieren“, bzw. {{laS|pars}} „Teil“; im Deutschen gelegentlich auch &amp;#039;&amp;#039;&amp;#039;Zerteiler&amp;#039;&amp;#039;&amp;#039;) ist ein [[Computerprogramm]], das in der [[Informatik]] für die Zerlegung und Umwandlung einer Eingabe in ein für die Weiterverarbeitung geeigneteres Format zuständig ist. Häufig werden Parser eingesetzt, um im Anschluss an den Analysevorgang die [[Formale Semantik|Semantik]] der Eingabe zu erschließen und daraufhin Aktionen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu einem [[Recognizer]], der die Eingabe analysiert und ausgibt, ob diese im Sinne der Vorgaben &amp;#039;&amp;#039;richtig&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;falsch&amp;#039;&amp;#039; ist, gibt der Parser die Analyse einer Eingabe in einer gewünschten Form aus und erzeugt zusätzlich Strukturbeschreibungen.&lt;br /&gt;
&lt;br /&gt;
Die Syntaxanalyse &amp;#039;&amp;#039;(Parsing)&amp;#039;&amp;#039; findet auch außerhalb der Informatik Anwendung, z.&amp;amp;nbsp;B. bei der Untersuchung der Struktur von [[Natürliche Sprache|natürlichen Sprachen]]. In der [[Grammatik]] würde die Syntaxanalyse eines Satzes dem Zerlegen des Satzes in seine grammatikalischen Bestandteile ([[Syntax]]) entsprechen (siehe dazu [[Linguistik]]).&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Beispiele ==&lt;br /&gt;
Im Allgemeinen wird ein Parser dazu verwendet, einen Text in eine neue Struktur zu übersetzen, z.&amp;amp;nbsp;B. in einen [[Syntaxbaum]], welcher die Hierarchie zwischen den Elementen ausdrückt.&lt;br /&gt;
&lt;br /&gt;
* [[Hypertext Markup Language|HTML]]-Code besteht aus reinem Text. Der in einem [[Webbrowser]] enthaltene Parser erstellt daraus den logischen Aufbau als Datenstruktur. Das Aussehen dieser Elemente wird getrennt via [[Cascading Style Sheets|CSS]] definiert.&lt;br /&gt;
* [[RSS-Parser]] wandeln [[RSS (Web-Feed)|RSS]]-Feeds in ein anderes Datenformat, beispielsweise für eine HTML-Seite.&lt;br /&gt;
* [[XML-Parser]] analysieren [[Extensible Markup Language|XML]]-Dokumente und stellen die darin enthaltenen Informationen (also Elemente, Attribute usw.) für die weitere Verarbeitung zur Verfügung.&lt;br /&gt;
* [[Uniform Resource Identifier|URI]]-Parser lösen Schemata wie [[Uniform Resource Locator|URLs]] in ihren hierarchischen Aufbau auf (siehe dazu &amp;lt;nowiki&amp;gt;RFC&amp;amp;nbsp;3986&amp;lt;/nowiki&amp;gt;&amp;lt;ref&amp;gt;{{RFC-Internet |RFC=3986 |Titel=Uniform Resource Identifier (URI): Generic Syntax |Datum=2005-01}}&amp;lt;/ref&amp;gt;).&lt;br /&gt;
* [[Logdatei]]-Parser dienen zum Extrahieren von relevanten Informationen aus [[Webserver]]-Protokolldateien, Ereignisprotokollen und anderer in Logdateien gespeicherter Informationen zur automatisierten Analyse.&lt;br /&gt;
* Suchmaschinen parsen Webseiten und [[Webcrawler|crawlen]] relevante Textpassagen.&lt;br /&gt;
* Auslesen einer [[Programmiersprache]]. Aus der erhaltenen Datenstruktur kann ein [[Compiler]] dann Maschinencode bzw. [[Bytecode]] erzeugen.&lt;br /&gt;
* Ein [[Kommandozeileninterpreter]] parst Befehle mitsamt ihren Parametern für die korrekte Ausführung der Anweisungen des Benutzers (z.&amp;amp;nbsp;B. via [[COMMAND.COM]]).&lt;br /&gt;
* In [[Textadventure]]s erfolgt die Steuerung der Spielfigur über die Eingabe von Befehlen in natürlicher Sprache, z.&amp;amp;nbsp;B. „Schließe die Haustür mit dem Hausschlüssel auf“. Der Parser greift auf eine Datenbank aller manipulierbarer Objekte im Spiel zu und analysiert, welche Interaktion mit welchen Objekten der Spielwelt der Spieler mit seiner Befehlseingabe meinte.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
Zur Analyse des Texts verwenden Parser in der Regel einen separaten [[Lexikalische Analyse|Lexer]] (auch &amp;#039;&amp;#039;lexikalischer Scanner&amp;#039;&amp;#039; genannt). Dieser zerlegt die (als simple [[Zeichenkette]] vorliegenden) Eingabedaten in [[Token (Übersetzerbau)|Token]] (Eingabesymbole bzw. „Wörter“, die der Parser versteht); weil die Zerlegung in Token einer [[Reguläre Grammatik|regulären Grammatik]] folgt, ist der Scanner meist ein [[endlicher Automat]]. Diese Token dienen als atomare Eingabezeichen des Parsers. Parser, die keinen separaten Scanner verwenden, werden &amp;#039;&amp;#039;Scannerless parsers&amp;#039;&amp;#039; genannt.&lt;br /&gt;
&lt;br /&gt;
Der eigentliche Parser als [[Implementierung]] eines abstrakten [[Automat (Informatik)|Automaten]] (meist realisiert als [[Kellerautomat]]) kümmert sich dagegen um die Grammatik der Eingabe, führt eine [[Syntax|syntaktische]] Überprüfung der Eingangsdaten durch und erstellt in der Regel aus den Daten einen [[Ableitungsbaum]] (in Anlehnung an das Englische gelegentlich auch als &amp;#039;&amp;#039;Parse-Baum&amp;#039;&amp;#039; bezeichnet). Dieser wird danach zur Weiterverarbeitung der Daten verwendet; typische Anwendungen sind die [[semantische Analyse]], [[Codegenerierung]] in einem [[Compiler]] oder Ausführung durch einen [[Interpreter]].&lt;br /&gt;
&lt;br /&gt;
Bei HTML würde ein lexikalischer Scanner die HTML-Datei in [[Tag (Informatik)|HTML-Tags]] und [[Fließtext]] zerlegen und diese Bestandteile an den Parser weiterreichen – d.&amp;amp;nbsp;h. den Scanner „interessiert“ nur das Aussehen der Syntaxelemente („wenn es in spitzen Klammern steht, ist es ein HTML-Tag“). Der Parser dagegen verarbeitet die syntaktischen Zusammenhänge, d.&amp;amp;nbsp;h. untersucht, welche Paare von Tags zusammengehören bzw. wie die Tags ineinander verschachtelt sind; die inhaltliche Bedeutung der Tags interessiert den Parser dagegen nicht, sondern wird erst von der darauf folgenden Weiterverarbeitung berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
Anschaulich dargestellt ist ein Parser diejenige Software, welche die Anweisungen im [[Quelltext]] des Anwenders überprüft, weiterverarbeitet und weiterleitet.&lt;br /&gt;
&lt;br /&gt;
== Parser-Typen ==&lt;br /&gt;
Man unterscheidet verschiedene Parse-Verfahren. Dabei wird nach genereller&lt;br /&gt;
Vorgehensweise, also der Unterscheidung nach der Reihenfolge, in der die&lt;br /&gt;
Knoten des Ableitungsbaums erstellt werden&lt;br /&gt;
([[Top-down und Bottom-up|top-down]], auch &amp;#039;&amp;#039;theoriegetriebenes Parsing&amp;#039;&amp;#039; oder&lt;br /&gt;
[[Top-down und Bottom-up|bottom-up]], auch &amp;#039;&amp;#039;eingabegetriebenes Parsing,&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;left corner&amp;#039;&amp;#039;), spezifischer Vorgehensweise (LL, LR, SLR, LALR, LC,&amp;amp;nbsp;…) und Implementierungstechnik ([[Rekursiver Abstieg|rekursiv absteigend]], rekursiv aufsteigend oder tabellengesteuert) unterschieden. Weiter wird auch nach Grammatikart unterschieden.&lt;br /&gt;
&lt;br /&gt;
=== Parser für kontextfreie Grammatiken ===&lt;br /&gt;
Hier ein paar auf [[Kontextfreie Grammatik|kontextfreien Grammatiken]] basierende Verfahren:&lt;br /&gt;
* [[Top-Down-Parser]]&lt;br /&gt;
** [[LF-Parser]]&lt;br /&gt;
** [[LL-Parser]]&lt;br /&gt;
* [[Bottom-up-Parser]]&lt;br /&gt;
** [[LR-Parser]]&lt;br /&gt;
** [[SLR-Parser]]&lt;br /&gt;
** [[LALR-Parser]]&lt;br /&gt;
* [[Chart-Parser]]&lt;br /&gt;
* [[Left-Corner-Parser]]&lt;br /&gt;
** [[LC-Parser]]&lt;br /&gt;
Ein [[Top-Down-Parser]] generiert mithilfe von Regeln einer [[Formale Grammatik|formalen Grammatik]] und der Expansion der Nichtterminale einen [[Syntaxbaum]] für eine gegebene [[Zeichenkette]]. Er beginnt beim Startsymbol und arbeitet sich zu den Terminalen vor. Dabei verwendet er die Linksableitung. Es gibt zwei Typen von Top-Down-Parsern: Rekursive Abstiegsparser und nicht-rekursive Abstiegsparser. Der rekursive Abstiegsparser wird auch als &amp;#039;&amp;#039;Brute-Force-Parser&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Backtracking-Parser&amp;#039;&amp;#039; bezeichnet. Er generiert den Syntaxbaum mithilfe von Brute-Force- und Backtracking-Techniken. Der nicht-rekursive Abstiegsparser wird auch als &amp;#039;&amp;#039;[[LL-Parser]]&amp;#039;&amp;#039;, &amp;#039;&amp;#039;prädiktiver Parser&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Parser ohne Backtracking&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;dynamischer Parser&amp;#039;&amp;#039; bezeichnet. Er verwendet eine Syntaxtabelle anstelle von Backtracking, um den Syntaxbaum zu generieren.&lt;br /&gt;
&lt;br /&gt;
Ein [[Bottom-up-Parser]] generiert den [[Syntaxbaum]] für eine gegebene Eingabezeichenkette mithilfe von Regeln einer [[Formale Grammatik|formalen Grammatik]], indem er die Terminalsymbole komprimiert. Er beginnt mit den Terminalsymbolen und endet mit dem Startsymbol. Dabei verwendet er die Rechtsableitung in umgekehrter Reihenfolge. Bottom-up-Parser werden in zwei Typen unterteilt: [[LR-Parser]] und Operatorpräzedenzparser. Der LR-Parser generiert den Syntaxbaum für die gegebene [[Zeichenkette]] mithilfe einer eindeutigen Grammatik. Er folgt der umgekehrten Rechtsableitung. Der Operatorpräzedenzparser generiert den Syntaxbaum aus der gegebenen Grammatik und Zeichenkette, wobei die Bedingung gilt, dass zwei aufeinanderfolgende Nichtterminalsymbole und das Epsilon niemals auf der rechten Seite einer Regel stehen dürfen.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.geeksforgeeks.org/compiler-design/types-of-parsers-in-compiler-design/ |titel=Types of Parsers in Compiler Design |werk=GeeksforGeeks |datum=2019-07-26 |sprache= |abruf=2026-04-28}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parser für kontextsensitive Grammatiken ===&lt;br /&gt;
* [[Packrat Parser]] (Parsing Expression Grammars)&lt;br /&gt;
&lt;br /&gt;
Das Parsen wohldefinierter künstlicher Sprachen (siehe [[formale Sprache]]n, [[Programmiersprache]]n) ist weniger komplex als das Parsen frei gewachsener [[Natürliche Sprache|natürlicher Sprachen]] wie Englisch oder Deutsch, die durch eine Vielzahl von [[Mehrdeutigkeit]]en, Irregularitäten und Inkonsistenzen geprägt sind. Siehe hierzu auch [[Computerlinguistik]] und [[Dependenzparsing]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039; Der Begriff &amp;#039;&amp;#039;parsen&amp;#039;&amp;#039; sollte nicht mit dem Begriff &amp;#039;&amp;#039;[[Kompilierung|kompilieren]]&amp;#039;&amp;#039; verwechselt werden. Letzteres erzeugt einen Zielcode aus einem Quellcode, dabei wird unter anderem auch geparst, darüber hinaus finden aber weitere Aktionen statt.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Parser werden häufig eingesetzt, um aus einer Aneinanderreihung von Symbolen eine Baumstruktur zu machen. Ein typisches Beispiel dafür sind mathematische Ausdrücke wie&lt;br /&gt;
: &amp;lt;math&amp;gt;2 + (2 + 2) - \sin(\pi)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Dieser Ausdruck, so wie er hier steht, besteht erstmal nur aus einer Reihe von Symbolen. Es ist die Aufgabe eines [[Tokenizer]]s als Teil eines Parsers, diese Symbole (zum Beispiel in [[Leserichtung]] von links nach rechts) zu identifizieren und einzuordnen. Das Ergebnis ist eine [[Liste (Datenstruktur)|Liste]], die im Folgenden als Tabelle dargestellt wird und Zeile für Zeile zu lesen ist:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
! Symbol !! Kategorie !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Zahl ||&lt;br /&gt;
|-&lt;br /&gt;
| + || Rechenzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| ( || Klammer auf ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Zahl ||&lt;br /&gt;
|-&lt;br /&gt;
| + || Rechenzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Zahl ||&lt;br /&gt;
|-&lt;br /&gt;
| ) || Klammer zu ||&lt;br /&gt;
|-&lt;br /&gt;
| - || Rechenzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| sin || Symbolname || (hier: die [[Sinus]]-Funktion)&lt;br /&gt;
|-&lt;br /&gt;
| ( || Klammer auf ||&lt;br /&gt;
|-&lt;br /&gt;
| π || Symbolname || (hier: die [[Kreiszahl]] π)&lt;br /&gt;
|-&lt;br /&gt;
| ) || Klammer zu ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die (weitere) Aufgabe des Parsers ist nun, die zugrundeliegende Struktur dieser Symbolfolge zu erkennen. Häufig geschieht das in Form eines [[Parsebaum]]s (&amp;#039;&amp;#039;abstrakter Syntaxbaum&amp;#039;&amp;#039;), der in diesem Fall so aussehen kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: das sollte besser eine hübsche Grafik werden. (Erledigt! 9. Juni 2013)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       Ausdruck&lt;br /&gt;
                      /    |   \&lt;br /&gt;
                     /     |    \------------\&lt;br /&gt;
                    /      |                  \&lt;br /&gt;
            Ausdruck   Operator (-)            Funktionsaufruf&lt;br /&gt;
           /   |    \                         /               \&lt;br /&gt;
          /    |     \--\                    /                 \&lt;br /&gt;
         /     |         \              Funktionsname (sin)     Argument (pi)&lt;br /&gt;
 Zahl (2)  Operator (+)   Ausdruck&lt;br /&gt;
                         /     |  \&lt;br /&gt;
                        /      |   \------\&lt;br /&gt;
                       /       |           \&lt;br /&gt;
               Zahl (3)    Operator (*)     Zahl (5)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 --&amp;gt;&lt;br /&gt;
[[Datei:Parser-Organigram.svg|800px]]&lt;br /&gt;
&lt;br /&gt;
Dies ist die Ausgabe eines einfachen Parsers. Diese Ausgabe kann nun durch weitere Programme analysiert werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Compilerbau]]&lt;br /&gt;
* [[Parsergenerator]]&lt;br /&gt;
* [[Generative Programmierung]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* A. W. Appel: &amp;#039;&amp;#039;Modern Compiler Implementation in Java.&amp;#039;&amp;#039; Cambridge 1998.&lt;br /&gt;
* Paul Bennett: &amp;#039;&amp;#039;A Course in Generalized Phrase Structure Grammar.&amp;#039;&amp;#039; UCL Press, London 1995, ISBN 1-85728-217-5.&lt;br /&gt;
* Robert D. Borsley: &amp;#039;&amp;#039;Syntactic Theory. A unified approach.&amp;#039;&amp;#039; Edward Arnold, London 1991. 2. überarbeitete Auflage: 1998, ISBN 0-340-70610-4. Deutsche Übersetzung: &amp;#039;&amp;#039;Syntax-Theorie. Ein zusammengefasster Zugang.&amp;#039;&amp;#039; Niemeyer Verlag, Tübingen 1997, ISBN 3-484-22055-4.&lt;br /&gt;
* Sven Naumann, Hagen Langer: &amp;#039;&amp;#039;Parsing.&amp;#039;&amp;#039; Teubner Verlag, 1994.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wiktionary}}&lt;br /&gt;
* [https://github.com/MathosProject/Mathos-Parser Mathos Parser] – mathematical expression parser in C# (englisch)&lt;br /&gt;
* [https://www.dickgrune.com/Books/PTAPG_1st_Edition/ Parsing Techniques – A Practical Guide] (englisch)&lt;br /&gt;
* [https://www.cis.lmu.de/~leiss/parsing-06-07/parsingfolien.pdf Syntaxanalyse (Parsing)] ([[PostScript|PS]])&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Compilerbau]]&lt;br /&gt;
[[Kategorie:Computerlinguistik]]&lt;br /&gt;
[[Kategorie:Programmierwerkzeug]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>