es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de Antlr grun – no hay una entrada alternativa viable en

Estoy tratando de escribir una gramática para un intérprete de Prolog. Cuando ejecuto grun desde la línea de comandos con una entrada como “father(john,mary).”, recibo un mensaje que dice “entrada no viable en ‘father(john,'” y no sé por qué. He intentado reorganizar las reglas en mi gramática, usar diferentes puntos de entrada, etc., pero sigo obteniendo el mismo error. Ni siquiera estoy seguro/a de si es causado por mi gramática o algo más, como ANTLR en sí mismo/a. ¿Alguien puede señalar qué está mal en mi gramática o pensar en lo que podría ser la causa si no es la gramática?

Los comandos que ejecuté son:

antlr4 -no-listener -visitor Expr.g4
javac *.java
grun antlr.Expr start tests/test.txt -gui

Y este es el árbol de análisis resultante:

enter image description here

Aquí está mi gramática:

grammar Expr;

@header{
    package antlr;
}

// regla de inicio
start       : (programa | consulta) EOF
            ;

programa     : (regla_ '.')*
            ;

consulta       : conjuncion '?'
            ;

regla_       : compuesto
            | compuesto ':-' conjuncion
            ;

conjuncion : compuesto
            | compuesto ',' conjuncion
            ;

compuesto    : Atomo '(' elementos ')'
            | '.(' elementos ')'
            ;

lista        : '[]'
            | '[' elemento ']'
            | '[' elementos ']'
            ;

elemento     : Termino
            | lista
            | compuesto
            ;

elementos    : elemento
            | elemento ',' elementos
            ;

WS          : [ \t\r\n]+ -> skip ;

Atomo        : [a-z]|[A-Z]|[0-9]|'_';
            | '0' 
            ;

Var         : [a-z]|[A-Z]|[0-9]|'_';

Termino        : Atomo
            | Var
            ;
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas razones posibles por las que estás obteniendo el mensaje de error “entrada no viable” al ejecutar el intérprete de Prolog con tu gramática:

    1. Problema con el archivo de entrada: Verifica que el archivo de entrada que estás pasando a grun sea válido y no contenga errores de sintaxis. En este caso, asegúrate de que el archivo tests/test.txt contenga la sintaxis correcta de Prolog para la consulta father(john,mary).
    2. Problema con el analizador léxico: Asegúrate de que el analizador léxico esté tokenizando correctamente el archivo de entrada. Verifica que los tokens generados sean correctos y coincidan con la sintaxis del lenguaje Prolog. Puedes hacer esto ejecutando grun con la opción -tokens para visualizar los tokens producidos por el analizador léxico.

    3. Problema con las reglas del analizador sintáctico: Verifica las reglas gramaticales para asegurarte de que sean correctas y precisas. Asegúrate de que la gramática incluya todas las reglas necesarias para el lenguaje Prolog y que las reglas estén dispuestas correctamente. En este caso, puedes verificar la regla compuesta para asegurarte de que esté capturando correctamente la consulta father(john,mary).

    4. Problema con el intérprete de Prolog: Verifica que el intérprete de Prolog esté manejando correctamente el archivo de entrada y las reglas gramaticales. Asegúrate de que pueda parsear correctamente la consulta y devolver el resultado deseado.

    Puede ser beneficioso descomponer el problema en piezas más pequeñas y probar cada componente por separado, comenzando con el analizador léxico y avanzando hasta el intérprete de Prolog.

Comments are closed.