Sancochado (Java) - Parboiled (Java)

biblioteca sancochada
Desarrollador (es) Mathias Doenitz
Versión inicial 12 de noviembre de 2009 ; Hace 11 años  ( 12 de noviembre de 2009 )
Lanzamiento estable
1.3.1 / 24 de junio de 2019 ; Hace 22 meses  ( 24/06/2019 )
Repositorio Edita esto en Wikidata
Escrito en Java
Sistema operativo Multiplataforma
Licencia Licencia Apache 2.0
Sitio web .org sancochado

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.

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 de gramática, parboiled implementa un analizador de descenso 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;

public class CalculatorParser extends BaseParser<Object> {

    public Rule Expression() {
        return Sequence(
                Term(),
                ZeroOrMore(
                        Sequence(
                                FirstOf('+', '-'),
                                Term()
                        )
                )
        );
    }

    public Rule Term() {
        return Sequence(
                Factor(),
                ZeroOrMore(
                        Sequence(
                                FirstOf('*', '/'),
                                Factor()
                        )
                )
        );
    }

    public Rule Factor() {
        return FirstOf(
                Number(),
                Sequence('(', Expression(), ')')
        );
    }

    public Rule Number() {
        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:

String input = "1+2";
CalculatorParser parser = Parboiled.createParser(CalculatorParser.class);
ParsingResult<?> result = ReportingParseRunner.run(parser.expression(), input);
String parseTreePrintOut = ParseTreeUtils.printNodeTree(result); 
System.out.println(parseTreePrintOut);

Ver también

Referencias

enlaces externos