¿Es posible implementar [stmt]+ en yacc?
Tengo una tarea de la escuela que consiste en hacer un compilador en yacc.
Y la pregunta es:
PROGRAMA ::= STMT+
STMT ::= EXP | INSTR-DE-IMPR
…….
Intenté implementar STMT+ de esta manera:
Programa: STMT_PLUS { printf(“¡Programa!\n”); }
;
STMT_PLUS : STMT STMT_PLUS {}
| ;
STMT : STMT {}
| EXP {}
| INSTR_DE_IMPR {}
|
;
La entrada será en varias líneas.
¿Funcionará? Si está mal, ¿cómo debo editar mi código?
davy.ai
Tu implementación de STMT+ utilizando reglas recursivas parece correcta. Sin embargo, hay un pequeño problema con la ortografía de PRINT_STMT en tu código. Debería ser PRINT-STMT como se indica en el enunciado del problema.
Aparte de eso, tu código debería funcionar bien para aceptar múltiples líneas de entrada en forma de STMT+.
Es importante tener en cuenta que este fragmento de código solo representa una pequeña parte de una implementación de compilador más grande y no está completo por sí mismo. Asegúrate de escribir el resto de las reglas gramaticales, así como las acciones semánticas para generar la salida del compilador.