2009-01-18 13 views
6

Dada una expresión regular, estoy buscando un paquete que genere dinámicamente el código para una máquina de estados finitos que implementa el RE.RE -> generador FSM?

prefieren C/C++ y Python, pero también son de interés otros lenguajes.

+0

A mí también me gustaría tener este dispositivo. Especialmente para Python. –

Respuesta

3

re2c genera el código C. No estoy seguro de lo que quiere decir con "dinámica": AFAIK tendría que compilar y cargar dinámicamente la salida, si desea invocar el código generado durante la misma ejecución que lo generó.

1

Puede que no sea exactamente lo que está buscando, pero el Transductor de estado finito Xerox admite expresiones regulares, crea la máquina e incluso puede crear una representación gráfica con GraphViz.

Es realmente ingenioso para cosas como la morfología, pero por lo demás, lo sugeriría principalmente si buscas algo para explorar el lado teórico de las máquinas de estados finitos.

Dos advertencias: usa su propia sintaxis, por lo que no necesariamente se traducirá fácilmente a los idiomas que elija, y estoy seguro de que debe obtener una licencia para ello. Viene con el libro de Karttunnen y Beesley "Morfología del estado finito", que es una lectura muy interesante por derecho propio.

0

Lo que está pidiendo es un lexer ... Hay muchos de ellos para una plétora de lenguajes de programación. Para empezar, puede echar un vistazo here.

3

Ragel puede ser lo que estás buscando.

Genera código C/C++/D/Ruby/Java para máquinas de estado. Estos se describen utilizando expresiones regulares y operadores.

Compruebe el sitio web, su página principal es bastante explícita.

1

El Finite State Automata Utilities admite la generación de FSM a partir de expresiones regulares. También es compatible con la generación de código C, C++ y Java para FSM. Es compatible con la generación dinámica, pero está escrito en Prolog, y la llamada desde otro idioma puede ser una molestia.

0

Una buena implementación de Python de un convertidor de Expresión regular a Máquina de estados finitos es https://github.com/ferno/greenery. Está disponible en pypi a través de 'pip install greenery'.

Otro paquete de python utiliza zonas verdes para implementar analizadores iterativos: Protocolo de comunicaciones Analizador de Python y Originador https://github.com/pjkundert/cpppo. También está disponible a través de 'pip install cpppo'. Desafortunadamente, Cpppo es bastante complejo, en gran parte debido a un intento de compatibilidad con Python 2 y 3 en la misma fuente, incluida la compatibilidad completa con UTF-8.

De todos modos, cpppo debería darle una idea de cómo aplicar la excelente vegetación Regex al convertidor de FSM.