parboiled es una biblioteca Java de código abierto publicada bajo una licencia Apache . Proporciona soporte para definir analizadores PEG directamente en el código fuente de Java.
Desarrollador (es) | Mathias Doenitz |
---|---|
Versión inicial | 12 de noviembre de 2009 |
Lanzamiento estable | 1.3.1 / 24 de junio de 2019 [1] |
Repositorio | |
Escrito en | Java |
Sistema operativo | Multiplataforma |
Licencia | Licencia Apache 2.0 |
Sitio web |
sancochado se usa comúnmente como una alternativa para expresiones regulares o generadores de analizadores sintácticos (como ANTLR o JavaCC ), especialmente para aplicaciones pequeñas y medianas.
Además de proporcionar las construcciones para la definición gramatical, parboiled implementa un analizador sintáctico descendente recursivo completo con soporte para la construcción de árboles de sintaxis abstracta , informes de errores de análisis y recuperación de errores de análisis.
Ejemplo
Dado que el análisis sintáctico con sancochado no requiere una fase de lexización separada y no hay una sintaxis especial que aprender para la definición gramatical sancochado, es comparativamente fácil construir analizadores personalizados rápidamente.
Considere este el siguiente ejemplo clásico de "calculadora", con estas reglas en una pseudo notación simple
- Expresión ← Término (('+' / '-') Término ) *
- Término ← Factor (('*' / '/') Factor ) *
- Factor ← Número / '(' Expresión ')'
- Número ← [0-9] +
Con sancochado, esta descripción de la regla se puede traducir directamente al siguiente código Java:
import org.parboiled.BaseParser ; CalculatorParser de clase pública extiende BaseParser < Objeto > { pública Regla Expresión () { retorno Secuencia ( Plazo (), ZeroOrMore ( Secuencia ( FirstOf ( '+' , '-' ), Plazo () ) ) ); } pública Regla Plazo () { retorno Secuencia ( Factor (), ZeroOrMore ( Secuencia ( FirstOf ( '*' , '/' ), Factor () ) ) ); } pública Regla Factor () { retorno FirstOf ( Número (), Secuencia ( '(' , Expresión (), ')' ) ); } Número de regla pública () { return OneOrMore ( CharRange ( '0' , '9' )); } }
La clase define las reglas del analizador para el lenguaje (pero sin ninguna acción), que podrían usarse para analizar la entrada real con un código como este:
Entrada de cadena = "1 + 2" ; Analizador sintáctico CalculatorParser = Parboiled . createParser ( clase CalculatorParser . ); ParsingResult > Resultado = ReportingParseRunner . ejecutar ( analizador . expresión (), entrada ); String parseTreePrintOut = ParseTreeUtils . printNodeTree ( resultado ); Sistema . fuera . println ( parseTreePrintOut );
Ver también
Referencias
- ^ "Registro de cambios" . Sancochado . 24 de junio de 2019 . Consultado el 7 de enero de 2020 .
enlaces externos
- Sitio web oficial sancochado
- Ejemplo de un analizador completo de Java 6 escrito con sancochado