Frage

Ich bin neu bei JFlex.Ich habe festgestellt, dass JFlex ein Parser-Generator ist.Über Folgendes bin ich mir jedoch immer noch nicht im Klaren und brauche ungefähr gleich eine Klarstellung.

  1. Wie unterscheidet sich dies von der Verwendung von Regex zur Musteridentifikation und Datentrennung und was sind die zusätzlichen Vorteile der Verwendung von JFlex.

  2. Jeder spezielle Anwendungsfall, in dem JFlex über Regex nützlich ist.

  3. Ist es irgendwie nützlich für das allgemeine Parsen, z. B. von Text- / XML-Dateien?

Danke im Voraus.

War es hilfreich?

Lösung

JFlex ist kein Parser-Generator, sondern ein Scanner-Generator.Es token Eingang.Verwenden Sie es in Kombination mit einem Parser-Generator wie CUP oder NACH ACC/J.

Es gibt einen wichtigen Unterschied zwischen Scanner und Parser:

Ihre Fragen:

1) und 2) Angenommen, Sie müssen einen Eingabestrom von Zeichen in einen Strom von Token konvertieren, wobei die folgenden Muster gegeben sind:

  • wenn die Eingabe übereinstimmt [0-9]+ (etwas anderes als \. folgt), dann ist es ein vorzeichenloses Integral.Senden "INTEGER" zum Ausgang.
  • wenn die Eingabe übereinstimmt [0.9]+\.[0-9]* dann ist es ein vorzeichenloser Gleitkomma.Senden "FLOAT" zum Ausgang.

Beachten Sie, dass sie ein gemeinsames Präfix haben.Wenn Sie die Eingabe mit regulären Ausdrücken scannen möchten, müssen Sie sie in ihr gemeinsames Präfix aufteilen (es sei denn, Sie möchten, dass es sehr langsam ist, da reguläre Ausdrücke teuer sind).Zur Laufzeit müssen Sie zuerst das Präfix auswerten, wenn es übereinstimmt, und dann auswerten, was folgt, wenn ^\., Sie haben ein Integral und werden von vorne beginnen, wenn \. sie müssen bewerten, ob der folgende Text die Mantisse einer Gleitkommazahl ist.Wenn ja, haben Sie eine FLOAT.

Grundsätzlich ist das, was Sie bauen müssen, ein endlicher Automat in welchen Zuständen sind Entscheidungspunkte und spiegeln die bisher gesehene Eingabe wider, und Übergänge sind Bewertungen des aktuellen Zeichens, das in der Eingabe gesehen wird.

JFlex (wie viele andere Scanner-Generatoren) ermöglicht es Ihnen, den Code für solche Automaten automatisch zu generieren, indem Sie (im Grunde) nur reguläre Ausdrücke bereitstellen.Und wird sehr effizienten Code dafür generieren.

3) Sie können einen generierten Scanner und einen generierten Parser gleichzeitig verwenden, um kontextfreie Sprachen zu erkennen.Wie zum Beispiel Programmiersprachen.Obwohl es möglich sein sollte, XML damit zu analysieren (ich habe es noch nie versucht), werden normalerweise Parser für bestimmte Zwecke für XML verwendet (z SAXOPHON, StAX, etc, etc), da XML eine bekannte Struktur hat und dann nicht benötigt wird generieren ein Parser .

Übrigens, bitte beachten Sie, dass Sie können XML nicht mit Regex analysieren. ;)

Bezug.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top