16 Stimmen

Haben Sie jemals effektiv Lexer/Parser in der realen Welt Anwendung verwendet?

Vor kurzem habe ich angefangen, ANTLR zu lernen. Ich weiß, dass Lexer/Parser zusammen verwendet werden können, um Programmiersprachen zu erstellen.

Haben Sie, abgesehen von DSLs oder Programmiersprachen, jemals direkt oder indirekt Lexer/Parser-Tools (und Wissen) zur Lösung von Problemen in der realen Welt eingesetzt? Ist es für den durchschnittlichen Programmierer möglich, diese Probleme ohne Kenntnisse von Lexern oder Parsern zu lösen?

2voto

Ira Baxter Punkte 91118

Jedes Mal, wenn ein statisches Dokument (z.B. eine Datei) oder ein dynamisches Dokument (z.B. ein zeitlicher Strom) existiert und dieses Dokument irgendeine Art von Struktur hat, werden Sie eine Art von Parser benötigen. Bei hinreichend einfachen Strukturen können Sie mit Ad-hoc-Parsing auskommen (String-Hacking, Regexes usw.). Für Strukturen, die nicht verschachtelt sind, können Sie mit einem endlichen Automaten auskommen; hier ist ein Lexer-Generator oft hilfreich. Für komplexe Strukturen benötigen Sie einen organisierten Parser. Sie können Parser von Hand schreiben, wenn Sie mit rekursivem Descent-Parsing vertraut sind. Für wirklich komplexe Strukturen ist ein Parsergenerator fast immer ein großer Gewinn.

Wenn Sie eine Computersprache verarbeiten wollen, benötigen Sie als Ausgangspunkt Lexer und Parser. Sie reichen aber nicht aus, man muss auch etwas mit dem Ergebnis des Parsers machen.

Eine wirklich spektakuläre Anwendung von Lexing und Parsing, die wir gemacht haben, ist die Übersetzung von JOVIAL, einer Sprache aus den 1960er Jahren, in C für den B-2 Tarnkappenbomber. Siehe http://www.semdesigns.com/Products/Services/NorthropGrummanB2.html

1voto

dustyburwell Punkte 5705

Ein gutes Beispiel für einen Lexer/Parser, der in vielen Systemen verwendet wird, ist Apache Lucene (eine Open-Source-Suchindex-Bibliothek). Sowohl der Query Parser als auch der Document Tokenizer verwenden diese Techniken. Obwohl man den Query-Parser in Lucene wohl als dsl-Parser bezeichnen könnte, wird er dennoch zur Lösung eines realen Problems eingesetzt.

Im Übrigen bin ich sicher, dass Google eine Art Lexer/Parser für seine eigene Abfragesyntax und das Parsen von Dokumenten einsetzt.

1voto

codekaizen Punkte 26382

Das ist interessant.

Ich habe gerade einen Lexer/Parser von Hand geschrieben, damit einfache stringbasierte Abfrageausdrücke von einer IBindingListView-Implementierung verarbeitet werden können. Das war die erste nützliche Sache außerhalb des Codes, die ich tatsächlich in der Lage war, es zu verwenden, und nicht nur davon gehört.

Ein ziemlich langweiliges Beispiel, aber ich habe auch nur wenig Erfahrung mit ihnen.

1voto

X-Istence Punkte 15834

Ich habe noch keine lexikalische Analyse mit einem der großen Anbieter durchgeführt, aber ich habe für ein Projekt, an dem ich gearbeitet habe, meinen eigenen Lexer von Hand geschrieben. Wir mussten Daten analysieren, die vom Datencomputer eines Near Space-Projekts zurückkamen und in binärer Form auf die SD-Karte geschrieben waren. Ich musste die Bits auseinandernehmen, sie von binär nach dezimal konvertieren und dann den gesamten Inhalt in eine kommagetrennte Datei schreiben.

Es macht sehr viel Spaß, sich hinzusetzen und logisch zu denken und einen Zustandsautomaten für die jeweilige Aufgabe zu schreiben!

0voto

andyp Punkte 6109

Ja! Das Team, mit dem ich zusammenarbeite, hat ein Framework zur Dokumentenerstellung implementiert, das unter anderem die Auswertung von (meist arithmetischen) Ausdrücken ermöglicht. Wir verwenden einen Parser, um Ausdrücke aus den Eingaben/Definitionen für die generierten Dokumente zu extrahieren und Ausdrucksbäume für sie zu erstellen. Anschließend werden diese Bäume ausgewertet und die ausgewerteten Ergebnisse in das endgültige Dokument geschrieben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X