2009-01-18 8 views
6

Bei einem regulären Ausdruck suche ich nach einem Paket, das dynamisch den Code für einen endlichen Automaten generiert, der den RE implementiert.RE -> FSM Generator?

C/C++ und Python bevorzugt, aber auch andere Sprachen sind von Interesse.

+0

Ich möchte auch so ein Gerät. Speziell für Python. –

Antwort

3

re2c generiert C-Code. Ich bin mir nicht sicher, was Sie mit "dynamisch" meinen - AFAIK müssten Sie kompilieren und die Ausgabe dynamisch laden, wenn Sie den generierten Code während desselben Laufs aufrufen möchten, den Sie generiert haben.

1

Es ist möglicherweise nicht genau das, wonach Sie suchen, aber der Xerox Finite State Transducer unterstützt reguläre Ausdrücke, erstellt den Computer und kann sogar eine grafische Darstellung mit GraphViz erstellen.

Es ist wirklich geschickt für Dinge wie Morphologie, aber ansonsten würde ich es vor allem vorschlagen, wenn Sie etwas suchen, um die theoretische Seite der endlichen Automaten zu erkunden.

Zwei Vorbehalte: Es verwendet eine eigene Syntax, so dass es nicht unbedingt leicht in die Sprachen Ihrer Wahl übersetzt wird, und ich bin ziemlich sicher, dass Sie eine Lizenz dafür haben müssen. Es kommt mit Karttunnen und Beesley's Buch "Finite State Morphology", das eine sehr interessante Lektüre ist.

0

Was Sie verlangen, ist ein Lexer ... Es gibt viele von ihnen für eine Vielzahl von Programmiersprachen. Für einen Start können Sie sich here ansehen.

3

Ragel kann sein, was Sie suchen.

Es generiert C/C++/D/Ruby/Java-Code für State Machines. Diese werden unter Verwendung von regulären Ausdrücken und Operatoren beschrieben.

Überprüfen Sie die Website, ihre Titelseite ist ziemlich explizit.

1

Die Finite State Automata Utilities unterstützt die Generierung von FSMs aus regulären Ausdrücken. Es unterstützt auch C-, C++ - und Java-Codegenerierung für FSMs. Es unterstützt dynamische Generierung, aber es ist in Prolog geschrieben, und Anrufe aus einer anderen Sprache können ein Aufwand sein.

0

Eine gute Python-Implementierung eines Konverters von Regular Expression zu Finite State Machine ist https://github.com/ferno/greenery. Es ist auf Pypi über "Pip installieren Grün" verfügbar.

Ein anderes Python-Paket verwendet grün, um iterative Parser zu implementieren: Kommunikationsprotokoll Python-Parser und Originator https://github.com/pjkundert/cpppo. Es ist auch über 'pip install cpppo' verfügbar. Cpppo ist leider ziemlich komplex, nicht zuletzt aufgrund eines Versuchs, Python 2 und 3 in derselben Quelle zu unterstützen, einschließlich der vollständigen UTF-8-Kompatibilität.

Wie auch immer, cpppo sollte Ihnen eine Idee geben, wie Sie den exzellenten grünen Regex auf den FSM Konverter anwenden können.