
/* errores.c */

#include <stdio.h>
#include <stdlib.h>
#include "errores.h"
#include "lexico.h"
#include "vocabula.h"

void error(tipoError tipo, int nError){
  printf("Error");
  switch(tipo) {
    case errGeneral:
      switch(nError) {
        case 0:
          printf(": comando no valido, falta el fichero de entrada.\n");
          break;
        case 1:
          printf(": no hay suficiente memoria. Linea %d.\n",lineaLeida);
          break;
        default:
          printf(": error generico.\n");
      }
      break;
    case errLexSint:
      printf(" sintactico: se esperaba ");
      switch(nError) {
        case pcCtl:
          printf("/ctl");
          break;
        case pcVoc:
          printf("/voc");
          break;
        case pcOtx:
          printf("/otx");
          break;
        case pcLtx:
          printf("/ltx");
          break;
        case pcCon:
          printf("/con");
          break;
        case pcStx:
          printf("/stx");
          break;
        case pcMtx:
          printf("/mtx");
          break;
        case pcObj:
          printf("/obj");
          break;
        case pcPro:
          printf("/pro");
          break;
        case pSubrayado:
          printf("_");
          break;
        case pPalabra:
          printf("una palabra");
          break;
        case pNumero:
          printf("un numero");
          break;
        case pIdNumerico:
          printf("/numero");
          break;
        case pFinal:
          printf("final de fichero");
          break;
      }
      printf(" en la linea %d.\n", lineaLeida);
      break;
    case sinError:
      printf(" ninguno. Compilacion terminada.\n");
      break;
    case errVocab:
      printf(" de vocabulario. ");
      switch(nError) {
        case 0:
          printf("Palabra duplicada en linea %d.\n", lineaLeida);
          break;
      }
      break;
    case errSem:
      printf(" semantico. ");
      switch(nError) {
        case 0:
          printf("El tipo de palabra no es valido en linea %d.\n", lineaLeida);
          break;
        case 1:
          printf("Texto no consecutivo en linea %d.\n", lineaLeida);
          break;
        case 2:
          printf("Demasiados textos en linea %d.\n", lineaLeida);
          break;
        case 3:
          printf("pocos textos de sistema en linea %d.\n", lineaLeida);
          break;
        case 4:
          printf("conexiones desordenadas. Linea %d.\n",lineaLeida);
          break;
        case 5:
          printf("\"%s\" no es una direccion. Linea %d.\n", lexema, lineaLeida);
          break;
        case 6:
          printf("\"%s\" no es un valor valido para la posicion. Linea %d.\n", lexema, lineaLeida);
          break;
        case 7:
          printf("se encontro \"%s\" en lugar de \"y\", \"Y\" o \"_\". Linea %d.\n", lexema, lineaLeida);
          break;
        case 8:
          printf("\"%s\" no es una palabra del vocabulario. Linea %d.\n", lexema, lineaLeida);
          break;
        case 9:
          printf("\"%s\" no es un nombre del vocabulario. Linea %d.\n", lexema, lineaLeida);
          break;
        case 10:
          printf("\"%s\" no es un adjetivo del vocabulario. Linea %d.\n", lexema, lineaLeida);
          break;
        case 11:
          printf("Numero de objeto no valido u orden incorrecto. Linea %d.\n", lexema, lineaLeida);
          break;
        case 12:
          printf("\"%s\" no es un condacto. Linea %d.\n", lexema, lineaLeida);
          break;
        case 13:
          printf("Numero de proceso no valido u orden incorrecto. Linea %d.\n", lexema, lineaLeida);
          break;
        case 14:
          printf("\"%s\" no es un verbo del vocabulario. Linea %d.\n", lexema, lineaLeida);
          break;
        case 15:
          printf("El valor debe estar entre 0 y 255. Linea %d.\n", lineaLeida);
          break;
        case 16:
          printf("El valor debe estar entre 1 y 99. Linea %d.\n", lineaLeida);
          break;
        case 17:
          printf("Numero de objeto no valido. Linea %d.\n", lineaLeida);
          break;
        case 18:
          printf("Numero de mensaje no valido. Linea %d.\n", lineaLeida);
          break;
        case 19:
          printf("Numero de mensaje del sistema no valido. Linea %d.\n", lineaLeida);
          break;
        case 20:
          printf("Numero de proceso no valido. Linea %d.\n", lineaLeida);
          break;
        case 21:
          printf("Numero de localidad no valido. Linea %d.\n", lineaLeida);
          break;
      }
  }
  /*FinalizarVocabulario();*/
  exit(-1);
}
