Zum Inhalt springen

„Parser“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Wiki-Links formatiert
Berlin-Jurist (Diskussion | Beiträge)
Anwendung und Funktionsweise: Doppelung zur Lemmaerläuterung entfernt.
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 10: Zeile 10:


Im obigen HTML-Beispiel würde ein lexikalischer Scanner die HTML-Datei in HTML-Tags und Fließtext zerlegen und diese Bestandteile an den Parser weiterreichen – d. 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. h. untersucht, welche Paare von Tags zusammen gehö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.
Im obigen HTML-Beispiel würde ein lexikalischer Scanner die HTML-Datei in HTML-Tags und Fließtext zerlegen und diese Bestandteile an den Parser weiterreichen – d. 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. h. untersucht, welche Paare von Tags zusammen gehö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.

Anschaulich dargestellt ist ein Parser diejenige Software, welche die Anweisungen des Anwenders interpretiert.

== Parser-Fehler ==
Zu Fehlfunktionen kommt es dann, wenn der Parser den vom Anwender verwendeten Syntax nicht korrekt interpretieren kann. In der Praxis liegt dies beispielsweise oft an zuviel oder zuwenig Leerzeichen - Abhilfe schafft beispielsweise in diesem Fall häufig ein '' '' (Non-breaking Space), ein Zeichen, das zwar wie ein Leerzeichen ausgegeben wird, aber wie ein normales nicht-leeres Zeichen interpretiert wird.


== Parser-Typen ==
== Parser-Typen ==

Version vom 3. April 2006, 09:46 Uhr

Ein Parser [ˈpɑːɹsɚ] (engl.: to parse „analysieren“ bzw. von lateinisch pars „Teil“; weshalb Parser im Deutschen gelegentlich auch als Zerteiler bezeichnet werden) ist ein Computerprogramm, das entscheidet, ob ein Eingabetext zur formalen Sprache einer bestimmten Grammatik gehört.

Anwendung und Funktionsweise

Im Allgemeinen wird ein Parser dazu verwendet, einen Text in eine neue Struktur zu übersetzen, z. B. in einen Syntaxbaum, welcher die Hierarchie zwischen den Elementen ausdrückt. HTML-Code ist beispielsweise für einen Computer zunächst einmal nichts anderes als ein Text, also eine Aneinanderreihung von Buchstaben und Zeichen. Der in einem Webbrowser enthaltene Parser analysiert das HTML und erstellt daraus eine Beschreibung der Webseite als Datenstruktur, welche die Grafik-Maschine des Browsers anschließend graphisch auf den Bildschirm überträgt.

Zur Analyse des Texts verwenden Parser in der Regel einen separaten lexikalischen Scanner (auch Lexer genannt). Dieser zerlegt die (als simple Aneinanderreihung von Zeichen vorliegenden) Eingabedaten in Token (Eingabesymbole bzw. „Wörter“, die der Parser versteht); weil die Zerlegung in Tokens einer regulären Grammatik folgt, ist der Scanner meist ein endlicher Automat. Diese Token dienen als atomare Eingabezeichen des Parsers.

Der eigentliche Parser als Implementierung eines abstrakten Automaten (meist realisiert als Kellerautomat) kümmert sich dagegen um die Grammatik der Eingabe, führt eine syntaktische Überprüfung der Eingangsdaten durch und erstellt in der Regel aus den Daten einen Ableitungsbaum (in Anlehnung an das Englische gelegentlich auch als Parse-Baum 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.

Im obigen HTML-Beispiel würde ein lexikalischer Scanner die HTML-Datei in HTML-Tags und Fließtext zerlegen und diese Bestandteile an den Parser weiterreichen – d. 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. h. untersucht, welche Paare von Tags zusammen gehö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.

Anschaulich dargestellt ist ein Parser diejenige Software, welche die Anweisungen des Anwenders interpretiert.

Parser-Fehler

Zu Fehlfunktionen kommt es dann, wenn der Parser den vom Anwender verwendeten Syntax nicht korrekt interpretieren kann. In der Praxis liegt dies beispielsweise oft an zuviel oder zuwenig Leerzeichen - Abhilfe schafft beispielsweise in diesem Fall häufig ein   (Non-breaking Space), ein Zeichen, das zwar wie ein Leerzeichen ausgegeben wird, aber wie ein normales nicht-leeres Zeichen interpretiert wird.

Parser-Typen

Man unterscheidet verschiedene Parse-Verfahren. Dabei wird nach genereller Vorgehensweise (top-down, bottom-up oder left corner), spezifischer Vorgehensweise (LL, LR, SLR, LALR, LC, …) und Implementierungstechnik (rekursiv absteigend/„recursive-descent“, rekursiv aufsteigend/„recursive-ascent“, tabellengesteuert) unterschieden. Weiter wird auch nach Grammatikart unterschieden.

Parser für kontextfreie Grammatiken

Hier ein paar auf kontextfreien Grammatiken basierende Verfahren:

Parser für kontextsensitive Grammatiken

Das Parsen wohldefinierter künstlicher Sprachen (siehe formale Sprachen, Programmiersprachen) ist weniger komplex als das Parsen frei gewachsener natürlicher Sprachen wie Englisch oder Deutsch, die durch eine Vielzahl von Mehrdeutigkeiten, Irregularitäten und Inkonsistenzen geprägt sind. Siehe hierzu auch Computerlinguistik.

Hinweis: Der Begriff parsen sollte nicht mit dem Begriff kompilieren verwechselt werden. Letzteres erzeugt einen Zielcode aus einem Quellcode, dabei wird unter anderem auch geparst, darüberhinaus finden aber weitere Aktionen statt.

Siehe auch

Literatur

  • A. W. Appel: Modern Compiler Implementation in Java. Cambridge, 1998