Escribir un analizador de prólogo

Estoy tratando de escribir un analizador simple para una gramática. El analizador no necesita crear un árbol de análisis, solo reconoce si una oración coincide con la gramática. Hasta ahora, tengo los siguientes predicados, usando la notación DCG:

    program-->[].
    program-->stmt_list.
    stmt_list-->stmt,stmt_list.
    stmt-->[id,:=],expr;[read],[id];[write],expr.
    expr-->term, term_tail.
    term_tail-->add_op,term,term_tail.
    term_tail-->[].
    term-->factor, factor_tail.
    factor_tail-->mult_op, factor, factor_tail.
    factor_tail-->[].
    factor-->[(expr)].
    factor-->[id].
    factor-->[number].
    add_op-->[+].
    add_op-->[-].
    mult_op-->[*].
    mult_op-->[/].

Usando una consulta como program([read,id],[]). Debería estar recibiendo una respuesta verdadera, pero estoy recibiendo una falsa. ¿Qué falta que está causando esto? Gracias por tu ayuda.

preguntado el 03 de mayo de 12 a las 15:05

puede usar trace/0 para buscar errores -

1 Respuestas

stmt_list también puede estar vacío. agregando stmt_list --> [] resuelve el problema.

contestado el 03 de mayo de 12 a las 18:05

Tengo problemas para averiguar cómo hacer que el programa lea un archivo que contiene los tokens que se analizarán. Además, pensé en una regla similar a parse(Input):=program(Input,[]). funcionaría igual que simplemente ejecutar la consulta del programa, pero da un error de procedimiento indefinido. ¿Alguna idea de por qué? - jldavis76

Debe agregar el código Prolog que rodea su DCG. La apertura de archivos para lectura se puede hacer con open/4 or see/1 - Alejandro Serebrenik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.