Escribir un analizador de prólogo
Frecuentes
Visto 1,472 veces
1
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.
1 Respuestas
1
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 parsing prolog dcg or haz tu propia pregunta.
puede usar trace/0 para buscar errores - whd