Ragel es un compilador de máquina de estados finitos y un generador de analizador sintáctico . Inicialmente, Ragel admitía la salida para C , C ++ y código fuente de ensamblador , [1] se expandió para admitir varios otros lenguajes, incluidos Objective C , D , Go , Ruby y Java . [2] También se está desarrollando compatibilidad con idiomas adicionales. [3] Admite la generación de tablas o máquinas de estado controladas por flujo a partir de expresiones regulares [4]y / o gráficos de estado y también puede construir analizadores léxicos a través del método de coincidencia más larga. Ragel se dirige específicamente al análisis de texto y la validación de entrada . [5]
Desarrollador (es) | Adrian Thurston [6] |
---|---|
Lanzamiento estable | 6.10 / 24 de marzo de 2017 |
Versión de vista previa | 7.0.4 / 16 de febrero de 2021 |
Repositorio | ![]() |
Escrito en | C ++ |
Sistema operativo | Tipo Unix , Windows |
Tipo | Compilador de la máquina de estado |
Licencia | "Ragel 6 permanece bajo GPL v2 [código generado] cubierto por el MIT (o GPL v2)". [7] Ragel 7: Licencia MIT |
Sitio web | www .colm .net / open-source / ragel / |
Descripción general
Ragel apoya la generación de mesa o de control de flujo impulsado por las máquinas de estado de expresiones regulares y / o gráficos de estado y también se puede construir analizadores léxicos vía el método más antiguo partido. Una característica única de Ragel es que las acciones del usuario se pueden asociar con transiciones arbitrarias de la máquina de estado utilizando operadores que están integrados en las expresiones regulares. Ragel también admite la visualización de la máquina generada a través de graphviz .
El gráfico anterior representa una máquina de estado que toma la entrada del usuario como una serie de bytes que representan caracteres ASCII y códigos de control. 48..57 es equivalente a la expresión regular [0-9] (es decir, cualquier dígito), por lo que solo se pueden reconocer las secuencias que comienzan con un dígito. Si se encuentra 10 (salto de línea), hemos terminado. 46 es el punto decimal ('.'), 43 y 45 son signos positivos y negativos ('+', '-') y 69/101 es 'e' mayúscula / minúscula (para indicar un número en formato científico). Como tal, reconocerá lo siguiente correctamente:
24505578,12e578.3e1269.0e-33e + 3
pero no:
.346.-53.e22e5.1
Sintaxis
La entrada de Ragel es una expresión regular solo en el sentido de que describe un lenguaje regular ; por lo general, no está escrito en una expresión regular concisa, sino en varias partes, como en la forma Extended Backus-Naur . Por ejemplo, en lugar de admitir clases de caracteres POSIX en la sintaxis de expresiones regulares, Ragel las implementa como reglas de producción integradas. Al igual que con los generadores de analizadores sintácticos habituales, Ragel permite el manejo de código para que las producciones se escriban con la sintaxis. [8] El código que da como resultado el ejemplo anterior del sitio web oficial es:
action dgt { printf ("DGT:% c \ n", fc); } action dec { printf ("DEC:. \ n"); } acción exp { printf ("EXP:% c \ n", fc); } action exp_sign { printf ("SGN:% c \ n", fc); } número de acción { / * NUMBER * / } # Un literal numérico de punto flotante.número = ( [0-9] + $ dgt ( '.' @ Dec [0-9] + $ dgt )? ( [eE] ( [+ \ -] $ exp_sign )? [0-9] + $ exp )? ) % número ; principal : = ( número '\ n' ) * ;
Ver también
- Comparación de generadores de analizadores sintácticos
- UML ejecutable
- Máquina de estados finitos
- Expresión regular
- Construcción de Thompson : el algoritmo utilizado por Ragel
- Umple
- Tecnología de estado finito de Helsinki (HFST)
Referencias
- ^ Adrian D. Thurston. " Análisis de lenguajes informáticos con un autómata compilado a partir de una sola expresión regular. Archivado el 7 de septiembre de 2012 en la Wayback Machine " En: 11th International Conference on Implementation and Application of Automata (CIAA 2006), Lecture Notes in Computer Science, volumen 4094 , pag. 285-286, Taipei, Taiwán, agosto de 2006.
- ^ "Guía del usuario de Ragel" (PDF) . Marzo de 2017.
- ^ "Idiomas de destino adicionales vuelven a Ragel 7" . 18 de mayo de 2018.
- ^ Liqun Chen, Chris J. Mitchell, Andrew Martin (2009) Informática de confianza: Segunda Conferencia Internacional, Trust 2009 Oxford, Reino Unido, 6 al 8 de abril de 2009, Actas . pag. 111
- ^ Omar Badreddin (2010) " Umple : un lenguaje de programación orientado a modelos". Ingeniería de software, 2010 ACM / IEEE 32nd International Conference on. Vol. 2 . IEEE, 2010.
- ^ Dr. Adrian D. Thurston en complang.org Última modificación: 14 de julio de 2013
- ^ "Compilador de máquina de estado de Ragel" . www.colm.net . Consultado el 19 de noviembre de 2019 .
- ^ "Guía del usuario de Ragel" (PDF) . Marzo de 2017.
enlaces externos
Medios relacionados con Ragel en Wikimedia Commons
- Página web oficial