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?

14voto

MarkusQ Punkte 21488

Ja, ich habe sie benutzt. Ja, man kann Dinge auch ohne sie tun - aber jedes Mal, wenn man das falsche Werkzeug für die Aufgabe wählt, macht man sich unnötig das Leben schwer.

Einige Beispiele für nicht standardmäßige Anwendungen, die ich persönlich mit der Technologie gemacht habe:

  • Auslesen von Daten aus Berichten, die von Altsystemen erstellt wurden
  • Erkennung von Mustern in Daten, die zu komplex für einen Regexp sind
  • Protokollanalyse
  • textbasierte Abenteuerspiele
  • die Metaprogrammier-API, die Toledo (nicht ihr richtiger Name) gefressen hat
  • Code-Analyse / Log-Analyse
  • Aufschlüsselung von "Freiform"-Feldern in einer Datenbank
  • und eine Menge mehr, die ich vergessen habe (ich bin alt)

5voto

Ash Punkte 58914

Syntax-Hervorhebung. Die Website Scite Texteditor ermöglicht es Ihnen, Ihren eigenen Lexer (in C++) zu schreiben, um Syntaxhervorhebung für jede beliebige Sprache bereitzustellen. Ich habe meinen eigenen benutzerdefinierten Lexer für Scite geschrieben, um dieses Thema aufzufrischen (ich habe es vor einer Weile an meiner Universität gelernt).

Reguläre Ausdrücke werden häufig als Alternative für den Mustervergleich und die einfache Sprachverarbeitung verwendet. Dies ist in den letzten Jahren dank der verbesserten RegEx-Unterstützung in Frameworks wie .NET sogar noch weiter verbreitet. In vielen Fällen wissen Entwickler nicht einmal, dass es Lexing/Parsing-Techniken gibt und verwenden daher standardmäßig Regex.

Wie jedoch eine andere Antwort besagt, kann Regex schnell ineffizient, langsam und schwer zu pflegen werden, wenn es sich um mehr als eine einfache Grammatik/Sprache handelt. In dieser Situation sind Parser/Lexer im Allgemeinen die beste Wahl.

2voto

Ja, ich habe sie in der realen Welt verwendet - aber meistens wurde die Erstellung von benutzerdefinierten Sprachen, für die man Lexer und Parser verwendet, durch in XML definierte Sprachen ersetzt. Das ist zwar umständlicher, aber man muss sich die ganze Arbeit nicht machen...

2voto

Glenn Punkte 7588

Ja, ich habe sie benutzt. Ich bin ein großer Fan von ANTLR. Ich gebe einige Tipps und Tricks zur Verwendung von ANTLR hier und eine kurze Stellungnahme dazu hier . Es ist möglich, einen eigenen Parser mit Ad-hoc-Methoden zu schreiben, aber es ist viel schwieriger und dauert viel länger, herauszufinden, wie man Änderungen vornimmt, wenn man die Sprache, die der Parser analysieren soll, erweitern muss.

2voto

BCS Punkte 71108

Überall, wo Texteingaben verarbeitet werden, wird eine Art Lexer/Parser verwendet, auch wenn es sich manchmal um den degenerierten Fall handelt (Lex alles außer einem Komma als ein Token-Typ und ein Komma als ein anderer. Parse Eine Zahl, ein Name, eine Zahl und ein Zeilenende. Diese Art von Dingen) In einer Sichtweise sscanf können als die degeneriertesten Fälle eines Lexer/Parser-Generators angesehen werden.

Was eine umfassende Lex/Ycc-Operation betrifft? Ich erwarte, dass dies hauptsächlich für folgende Zwecke verwendet wird GPLs und für Dinge, die unter die lose Definition von DSLs fallen

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