Buenas tardes,
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:
#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;
}
Por favor, ¿algún alma caritativa al que le tenga que deber aprobar mi última asignatura de la carrera?
Un saludo, y muchas gracias.