Recurro a vosotros ya como última opción porque no consigo solucionar un "Bus error" que me genera mi código al manejar punteros y que no sé cómo solucionar.
Estoy implementando un compilador con Flex y Yacc y en la parte de Flex incluyo el siguiente código C, que he probado a sacarlo a un fichero .c y me sigue dando el mismo fallo:
Código:
Por favor, ¿algún alma caritativa al que le tenga que deber aprobar mi última asignatura de la carrera?#include <stdlib.h> #include <stdio.h> #include <string.h> #include "y.tab.h" typedef struct reserv {/* tipo creado para las palabras reservadas de C */ char *palabra; int token; } reservadas; reservadas reserv[] = { {"if", 3}, {"else", 4}, {"while", 5}, {"main", 6}, {"printf", 7}, {"include", 8}, {"return", 9}, {"nil", 0} }; char *tipos[] = {"int", "void", "nil"}; /* nil añadido para marcar el fin de los tipos */ extern int lineno; extern FILE *yyin; void yyerror(char *); int reservada(char *palabra); int reservada(char *palabra) { int i = 0; int tipo = 1; while (strcasecmp(reserv[i].palabra, "nil")) { if (strcasecmp(reserv[i].palabra, palabra) == 0) { tipo = reserv[i].token; } i++; } while (strcasecmp(tipos[i], "nil")) { if (strcasecmp(tipos[i], palabra) == 0) { tipo = 2; } i++; } return tipo; } int main() { int tipo = reservada("while"); printf("%d", tipo); return tipo; }
Un saludo, y muchas gracias.