InglésFrancésEspañol

icono de página de OnWorks

ragel - Online en la nube

Ejecute ragel en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el comando ragel que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


ragel: compila lenguajes regulares en máquinas de estado ejecutables

SINOPSIS


ragel [opciones] presentar

DESCRIPCIÓN


Ragel compila máquinas de estados finitos ejecutables a partir de lenguajes regulares. Ragel puede
generar código C, C ++, Objective-C, D, Go o Java. Las máquinas de estado de Ragel no solo pueden
reconocer secuencias de bytes como lo hacen las máquinas de expresión regular, pero también pueden ejecutar código en
puntos arbitrarios en el reconocimiento de una lengua regular. El código de usuario está incrustado usando
operadores en línea que no interrumpen la sintaxis del lenguaje normal.

El lenguaje central consta de operadores de expresiones regulares estándar, como union,
concatenación y estrella kleene, acompañadas de operadores de incrustación de acción. Ragel también
proporciona operadores que le permiten controlar cualquier no determinismo que cree, construya
escáneres que utilizan el paradigma de coincidencia más largo y construyen máquinas de estado utilizando el diagrama de estado
modelo. También es posible influir en la ejecución de una máquina de estado desde el interior de una
acción incorporada saltando o llamando a otras partes de la máquina y reprocesando
entrada.

Ragel proporciona una interfaz muy flexible para el idioma host que intenta colocar
restricciones mínimas sobre cómo se utiliza e integra el código generado en el
solicitud. El código generado no tiene dependencias.

OPCIONES


-h, -H, -?, --ayuda
Mostrar ayuda y salir.

-v Imprime la información de la versión y sal.

-o presentar
Escribe la salida en un archivo. Si no se proporciona -o, se elige un nombre de archivo predeterminado mediante
reemplazando la extensión de archivo del archivo de entrada. Para los archivos de origen que terminan en .rh,
se utiliza el sufijo .h. Para todos los demás archivos de origen, un sufijo basado en el idioma de salida
se utiliza (.c, .cpp, .m, etc.). Si no se da -o para la salida Graphviz, el generado
El archivo .dot se escribe en la salida estándar.

-s Imprima algunas estadísticas sobre el error estándar.

--error-format = gnu
Imprime mensajes de error con el formato "archivo: línea: columna:" (predeterminado)

--error-format = msvc
Imprima mensajes de error con el formato "archivo (línea, columna):"

-d No elimine acciones duplicadas de las listas de acciones.

-I dir
Agregue dir a la lista de directorios para buscar archivos incluidos e importados

-n No realice la minimización de estado.

-m Realice la minimización una vez, al final de la compilación de la máquina de estado.

-l Minimice después de casi todas las operaciones. Las listas de operaciones similares, como los sindicatos, son
minimizado una vez al final. Ésta es la opción de minimización predeterminada.

-e Minimizar después de cada operación.

-x Compile las máquinas de estado y emita una representación XML de los datos del host y
máquinas.

-V Genere un archivo de puntos para Graphviz.

-p Muestre caracteres imprimibles en etiquetas.

-S
Especificación FSM a la salida.

-M
Definición de máquina / instanciación a la salida.

-C El lenguaje anfitrión es C, C ++, Obj-C u Obj-C ++. Este es el idioma de host predeterminado
.

-D El idioma anfitrión es D.

-J El idioma anfitrión es Java.

-Z El idioma anfitrión es Go.

-R El idioma anfitrión es Ruby.

-L Inhibir la escritura de directivas #line.

-T0 (C / D / Java / Ruby / C # / Go) Genere un FSM controlado por tablas. Este es el estilo de código predeterminado.
El FSM controlado por tablas representa la máquina de estado como datos estáticos. Hay mesas
de estados, transiciones, indicios y acciones. El estado actual se almacena en un
variable. La ejecución es un bucle que parece que dado el estado actual y
el carácter actual a procesar busca la transición a tomar usando una búsqueda binaria,
ejecuta cualquier acción y se mueve al estado de destino. En general, la mesa impulsada
FSM produce un binario más pequeño y requiere una compilación de lenguaje host menos costosa
pero da como resultado un código de ejecución más lento. El FSM impulsado por mesa es adecuado para cualquier FSM.

-T1 (C / D / Ruby / C # / Go) Genere un FSM basado en tablas más rápido expandiendo las listas de acciones en
la acción ejecuta el código.

-F0 (C / D / Ruby / C # / Go) Genere un FSM controlado por tabla plana. Las transiciones se representan como
una matriz indexada por el carácter alfabético actual. Esto elimina la necesidad de un
búsqueda binaria para localizar transiciones y produce código más rápido, sin embargo, solo es
adecuado para alfabetos pequeños.

-F1 (C / D / Ruby / C # / Go) Genere un FSM impulsado por tablas planas más rápido expandiendo las listas de acciones
en la acción ejecutar código.

-G0 (C / D / C # / Go) Genere un FSM impulsado por goto. El FSM impulsado por goto representa el estado
machine como una serie de declaraciones goto. Mientras está en la máquina, el estado actual es
almacenado por el puntero de instrucción del procesador. La ejecución es una función plana.
donde el control se pasa de un estado a otro usando gotos. En general, el goto FSM
produce un código más rápido pero da como resultado un binario más grande y un host más caro
compilación del lenguaje.

-G1 (C / D / C # / Go) Genere un FSM impulsado por goto más rápido expandiendo las listas de acciones en el
acción ejecutar código.

-G2 (C / D / Go) Genere un FSM impulsado por goto realmente rápido incrustando listas de acciones en el
código de control de la máquina de estado.

-PAG (C / D) N-Way Split FSM impulsado por goto realmente rápido.

RAGEL ENTRADA


NOTA: Esta es una descripción muy breve de la entrada de Ragel. Ragel se describe con más detalle
en la guía del usuario disponible en la página de inicio (ver más abajo).

Normalmente, Ragel pasa los archivos de entrada directamente a la salida. Cuando ve un FSM
especificación que contiene instancias de máquina, se detiene para generar la máquina de estado.
Si hay sentencias de escritura (como "escribir exec"), ragel emite la correspondiente
código. Puede haber cualquier número de especificaciones FSM en un archivo de entrada. Un FSM de varias líneas
la especificación comienza con '%% {' y termina con '} %%'. Una especificación FSM de una sola línea
comienza con %% y termina en la primera línea nueva.

FSM DECLARACIONES


Máquina Nombre:
Establezca el nombre de la máquina. Si se da, debe ser la primera declaración.

Alphabet Tipo:
Configure el tipo de datos del alfabeto.

Obtener la clave:
Especifique cómo recuperar el carácter alfabético del tipo de elemento.

Incluye:
Incluya una máquina del mismo nombre que la actual o de un nombre diferente en el
archivo actual o algún otro archivo.

Acción Definición:
Defina una acción que pueda ser invocada por FSM.

FSM Definición, Instanciación y más largo Match Instanciación:
Se utiliza para construir FSM. Descripción de la sintaxis en las siguientes secciones.

Acceso:
Especifique cómo acceder a las variables de la máquina de estado persistente.

Escribir: Escribe algún componente de la máquina.

Variable:
Anula los nombres de variables predeterminados (p, pe, cs, act, etc.).

ED. BÁSICA MÁQUINAS


Las máquinas básicas son los operandos base de las expresiones del lenguaje regular.

'Hola'
Concat literal. Produce una concatenación de los caracteres de la cadena. Apoyos
secuencias de escape con '\'. El resultado tendrá un estado de inicio y una transición a
un nuevo estado para cada carácter de la cadena. El último estado de la secuencia
ser definitivo. Para que la cadena no distinga entre mayúsculas y minúsculas, agregue una 'i' a la cadena, como
en 'cmd'i.

"Hola"
Idéntica a la versión de comillas simples.

[Hola]
O literal. Produce una unión de personajes. Admite rangos de caracteres con '-',
negando el sentido de la unión con un '^' inicial y secuencias de escape con '\'.
El resultado tendrá dos estados con una transición entre ellos para cada personaje.
o rango.

NOTA: '', "" y [] producen FSM nulos. Las máquinas nulas tienen un estado que es tanto un comienzo
estado y un estado final y coincidir con la cadena de longitud cero. Se puede crear una máquina nula
con la máquina incorporada nula.

entero
Hace una máquina de dos estados con una transición en el número entero dado.

hexagonal Hace una máquina de dos estados con una transición en el número hexadecimal dado.

/ simple_regex /
Una simple expresión regular. Admite la notación '.', '*' Y '[]', carácter
rangos con '-', negando el sentido de una expresión OR con una inicial '^' y
secuencias de escape con '\'. También admite una bandera final: i. Úselo para producir un
expresión regular que no distingue entre mayúsculas y minúsculas, como en / GET / i.

lit .. lit
Especifica un rango. Los límites superior e inferior permitidos son literales concat de
longitud uno y máquinas de números. Por ejemplo, 0x10..0x20, 0..63 y 'a' .. 'z' son
rangos válidos.

nombre de la variable
Hace referencia a la definición de máquina asignada al nombre de variable dado.

máquina_incorporada
Hay varias máquinas integradas disponibles. Son todas dos máquinas de estado para
el propósito de hacer coincidir clases comunes de caracteres. Son:

any Cualquier carácter del alfabeto.

ascii Caracteres ascii 0..127.

ampliar Caracteres extendidos ascii. Este es el rango -128..127 para alfabetos con signo
y el rango 0..255 para alfabetos sin signo.

alfa Caracteres alfabéticos / [A-Za-z]/.

dígito Dígitos / [0-9]/.

alnum Alfa numéricos / [0-9A-Za-z]/.

lower Caracteres en minúscula / [az]/.

superior Caracteres en mayúscula / [AZ]/.

xdigito Dígitos hexadecimales / [0-9A-Fa-f]/.

controlar Caracteres de control 0..31.

gráfica Caracteres gráficos / [! - ~]/.

Imprimir Caracteres imprimibles / [- ~]/.

punto Puntuación. Caracteres gráficos que no son alfanuméricos
/ [! - /: - @ \ [- `{- ~]/.

espacio Espacio en blanco / [\ t \ v \ f \ n \ r]/.

nulo Cuerda de longitud cero. Equivalente a '', "" y [].

vacío Conjunto vacio. No coincide con nada.

BREVE OPERADOR REFERENCIA


Los operadores se agrupan por precedencia, siendo el grupo 1 el más bajo y el grupo 6 el más alto.

1:

expr , expr
Unir máquinas sin dibujar ninguna transición, configurar un estado de inicio o
cualquier estado final. El estado de inicio debe especificarse explícitamente con la etiqueta "inicio".
Los estados finales se pueden especificar con las transiciones an epsilon a las implícitamente
creado el estado "final".

2:

expr | expr
Produce una máquina que coincide con cualquier hilo en la máquina uno o en la máquina dos.

expr & expr
Produce una máquina que coincide con cualquier hilo que esté tanto en la máquina uno como en la máquina.
dos.

expr - expr
Produce una máquina que coincide con cualquier cadena que esté en la máquina uno pero no en
máquina dos.

expr -- expr
Resta fuerte. Coincide con cualquier cuerda en la máquina uno que no tenga ninguna cuerda
en la máquina dos como una subcadena.

3:

expr . expr
Produce una máquina que coincide con todas las cadenas de la máquina uno seguido de todas las
cadenas en la máquina dos.

expr :> expr
Concatenación de entrada protegida: termina la máquina uno al entrar a la máquina dos.

expr : >> expr
Concatenación final protegida: termina la máquina uno cuando termina la máquina dos.

expr <: expr
Concatenación con protección a la izquierda: otorga una mayor prioridad a la máquina uno.

NOTA: La concatenación es el operador predeterminado. Dos máquinas una al lado de la otra sin
operador entre ellos da como resultado la operación de concatenación.

4:

etiqueta: expr
Adjunta una etiqueta a una expresión. Las etiquetas se pueden utilizar mediante transiciones épsilon y
Declaraciones fgoto y fcall en acciones. También tenga en cuenta que la referenciación de una máquina
La definición provoca la creación implícita de una etiqueta con el mismo nombre.

5:

expr -> Etiqueta
Dibuja una transición épsilon al estado definido por etiqueta. La etiqueta debe ser un nombre en
el alcance actual. Las transiciones de Epsilon se resuelven cuando los operadores de coma son
evaluado y en la raíz del árbol de expresión de la máquina
asignación / instanciación.

6: Acciones

Una acción puede ser un nombre predefinido con una declaración de acción o puede especificarse directamente
con '{' y '}' en la expresión.

expr > DE ACTUAR!
Incorpora acción en las transiciones iniciales.

expr @ DE ACTUAR!
Incorpora la acción en transiciones que pasan a un estado final.

expr $ DE ACTUAR!
Incorpora acción en todas las transiciones. No incluye las transiciones pendientes.

expr % DE ACTUAR!
Incorpora la acción en las transiciones pendientes desde los estados finales.

6: EOF Acciones

Cuando se llama a la rutina de finalización de una máquina, se ejecutan las acciones EOF del estado actual.

expr >/ DE ACTUAR!
Incruste una acción EOF en el estado de inicio.

expr </ DE ACTUAR!
Incruste una acción EOF en todos los estados excepto en el estado de inicio.

expr $/ DE ACTUAR!
Incruste una acción EOF en todos los estados.

expr %/ DE ACTUAR!
Incruste una acción EOF en estados finales.

expr @/ DE ACTUAR!
Incruste una acción EOF en todos los estados que no sean definitivos.

expr <> / DE ACTUAR!
Incruste una acción EOF en todos los estados que no son el estado de inicio y que no son
final (estados intermedios).

6: Global Error Acciones

Las acciones de error global se almacenan en estados hasta que la máquina de estado final ha sido completamente
construido. Luego se transfieren a transiciones de error, dando el efecto de una
acción por defecto.

expr >! DE ACTUAR!
Incruste una acción de error global en el estado de inicio.

expr <! DE ACTUAR!
Incruste una acción de error global en todos los estados excepto en el estado de inicio.

expr $! DE ACTUAR!
Incruste una acción de error global en todos los estados.

expr %! DE ACTUAR!
Incruste una acción de error global en los estados finales.

expr @! DE ACTUAR!
Incruste una acción de error global en todos los estados que no sean definitivos.

expr <>! DE ACTUAR!
Incruste una acción de error global en todos los estados que no son el estado de inicio y son
no final (estados intermedios).

6: Local Error Acciones

Las acciones de error local se almacenan en estados hasta que la máquina nombrada está completamente construida.
Luego se transfieren a transiciones de error, dando el efecto de una acción predeterminada para
una sección de la máquina total. Tenga en cuenta que el nombre puede omitirse, en cuyo caso el
La acción se transferirá a las acciones de error tras la construcción de la máquina actual.

expr >^ DE ACTUAR!
Incruste una acción de error local en el estado de inicio.

expr <^ DE ACTUAR!
Incruste una acción de error local en todos los estados excepto en el estado de inicio.

expr $^ DE ACTUAR!
Incruste una acción de error local en todos los estados.

expr %^ DE ACTUAR!
Incruste una acción de error local en los estados finales.

expr @^ DE ACTUAR!
Inserte una acción de error local en todos los estados que no sean definitivos.

expr <> ^ DE ACTUAR!
Incruste una acción de error local en todos los estados que no son el estado de inicio y son
no final (estados intermedios).

6: A estado Acciones

Las acciones de estado se almacenan en estados y se ejecutan cada vez que la máquina se mueve a un estado
estado. Esto incluye transiciones regulares y transferencias de control como fgoto. Nota
que configurar el estado actual desde fuera de la máquina (por ejemplo, durante
inicialización) no cuenta como una transición a un estado.

expr >~ DE ACTUAR!
Incruste una acción de acción de estado en el estado de inicio.

expr <~ DE ACTUAR!
Incruste una acción de estado en todos los estados excepto en el estado de inicio.

expr $~ DE ACTUAR!
Integrar una acción de estado en todos los estados.

expr %~ DE ACTUAR!
Incorporar una acción de estado en los estados finales.

expr @~ DE ACTUAR!
Integrar una acción de estado en todos los estados que no sean definitivos.

expr <> ~ DE ACTUAR!
Incorporar una acción de estado en todos los estados que no son el estado de inicio y no son
final (estados intermedios).

6: De-estado Acciones

Las acciones de estado se ejecutan siempre que un estado realiza una transición en un personaje. Esta
incluye la transición de error y una transición a uno mismo.

expr >* DE ACTUAR!
Incruste una acción de estado en el estado de inicio.

expr <* DE ACTUAR!
Incruste una acción de estado en todos los estados excepto en el estado de inicio.

expr $* DE ACTUAR!
Incorporar una acción del estado en todos los estados.

expr %* DE ACTUAR!
Incorporar una acción de estado en los estados finales.

expr @* DE ACTUAR!
Incorporar una acción del estado en todos los estados que no son definitivos.

expr <> * DE ACTUAR!
Incrustar una acción de estado en todos los estados que no son el estado de inicio y no son
final (estados intermedios).

6: Prioridad Asignación

Las prioridades se asignan a los nombres dentro de las transiciones. Solo las prioridades con el mismo nombre son
permitido interactuar. En la primera forma de prioridades, el nombre por defecto es el nombre del
definición de máquina en la que se asigna la prioridad. Las transiciones no tienen valores predeterminados
prioridades.

expr > int
Asigna la prioridad int en todas las transiciones que salen del estado de inicio.

expr @ int
Asigna la prioridad int en todas las transiciones que pasan a un estado final.

expr $ int
Asigna la prioridad int en todas las transiciones existentes.

expr % int
Asigna la prioridad int en todas las transiciones de salida pendientes.

Una segunda forma de asignación de prioridad permite al programador especificar el nombre al que
se asigna la prioridad, lo que permite que las interacciones crucen los límites de la definición de la máquina.

expr > (nombre, int)
Asigna la prioridad int al nombre en todas las transiciones que salen del estado de inicio.

expr @ (nombre, En t)
Asigna la prioridad int al nombre en todas las transiciones que pasan a un estado final.

expr $ (nombre, En t)
Asigna la prioridad int al nombre en todas las transiciones existentes.

expr % (nombre, En t)
Asigna la prioridad int al nombre de todas las transiciones de salida pendientes.

7:

expr * Produce la estrella kleene de una máquina. Coincide con cero o más repeticiones del
maquina

expr **
Estrella de Kleene de la partida más larga. Esta versión de kleene star da mayor prioridad a
permanecer en la máquina envolviendo y comenzando de nuevo. Este operador es
equivalente a ((expr) $ 0% 1) *.

expr ? Produce una máquina que acepta la máquina dada o la cadena nula. Este operador
es equivalente a (expr | '').

expr + Produce la máquina concatenada con la estrella kleen de sí misma. Coincide con uno o
más repeticiones de la máquina. Este operador es equivalente a (expr. Expr *).

expr {norte}
Produce una máquina que coincide exactamente con n repeticiones de expr.

expr {,norte}
Produce una máquina que coincide en cualquier lugar desde cero hasta n repeticiones de expr.

expr {norte,}
Produce una máquina que coincide con no más repeticiones de expr.

expr {Nuevo Méjico}
Produce una máquina que coincide con n am repeticiones de expr.

8:

! expr Produce una máquina que coincide con cualquier cadena que no coincida con la máquina dada. Esta
operador es equivalente a (* extender - expr).

^ expr Negación a nivel de personaje. Coincide con cualquier carácter individual que no coincida con el único
máquina de caracteres expr.

9:

( expr )
Fuerza la precedencia sobre los operadores.

VALORES DISPONIBLE IN CÓDIGO BLOQUES


fc El personaje actual. Equivalente a * p.

fpc Un puntero al personaje actual. Equivalente a p.

fcurs Un valor entero que representa el estado actual.

ftargs Un valor entero que representa el estado de destino.

valla ( )
Un valor entero que representa el punto de entrada .

DECLARACIONES DISPONIBLE IN CÓDIGO BLOQUES


sostener; No avance sobre el personaje actual. Equivalente a --p ;.

fexec ;
Establece el carácter actual en otra cosa. Equivalente ap = ( ) -1;

ir a ;
Salte a la máquina definida por .

ir a * ;
Salta al punto de entrada dado por . La expresión debe evaluarse como un número entero
valor que representa un estado.

siguiente ;
Establezca el siguiente estado para que sea el punto de entrada definido por . La siguiente declaración
no salta inmediatamente al estado especificado. Cualquier código de acción que siga a
declaración se ejecuta.

siguiente * ;
Establezca el siguiente estado para que sea el punto de entrada dado por . La expresión debe
evaluar a un valor entero que representa un estado.

llamar ;
Llame a la máquina definida por . El siguiente traste saltará al objetivo del
transición en la que se invoca la acción.

llamar * ;
Llame al punto de entrada dado por . El siguiente traste saltará al objetivo del
transición en la que se invoca la acción.

preocuparse; Regrese al estado de destino de la transición en la que se realizó la última llamada.

romper;
Guarde el estado actual y salga inmediatamente de la máquina.

CRÉDITOS


Ragel fue escrito por Adrian Thurston[email protected]>. Salida de Objective-C
contribución de Erich Ocean. Salida D aportada por Alan West. Salida de Ruby aportada por
Víctor Hugo Borja. C Generación de código Sharp contribuido por Daniel Tang. Contribuciones a
Generación de código Java por Colin Fleming. Vaya a la generación de código aportada por Justine Tunney.

Utilice ragel en línea utilizando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

Comandos de Linux

Ad