Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LONG_ETIQUETA 8 #define LONG_CODOP 5 #define COMENTARIO ';' #define TABULADOR '\t' #define ESPACIOS_ ' ' #define MAX 8 typedef enum {FALSO,VERDADERO} booleano; typedef enum {ETIQUETA,CODOP,OPERANDO} linea; typedef struct nodo { char *instruccion; struct nodo *sig; }COD; void imprimirLista(COD *cabeza); int verificarCombinacion(FILE *fd); booleano esComentario(FILE *fd); char *Etiqueta_Codop_Operando(FILE *fd,int linea); void ultimaLinea(char *codop); void buscarFinLinea(FILE *fd); void ignorarEspacios(FILE *fd); void listaTABOP(COD **cabeza); COD *ultimoElemento(COD **cabeza); COD *crearNodo(char *ins); void insertarFinal(char *ins,COD *ultimo); char *Tabla_Operandos(FILE *hc12); COD *buscarCodop(COD *cabeza,char *codop); void quitarSaltosLinea(char *cadena); booleano esNumero(char caracter); booleano esLetra(char caracter); int main() { FILE *fd; int car,combinacion; COD *cabeza = NULL,*encontrado = NULL; char *etiqueta,*codop,*operando; listaTABOP(&cabeza); //imprimirLista(cabeza); { { switch(car) { case COMENTARIO: if(esComentario(fd)) else buscarFinLinea(fd); break; case ESPACIOS_: case TABULADOR: etiqueta = "null"; ignorarEspacios(fd); codop = Etiqueta_Codop_Operando(fd,CODOP); erroresCodop(codop); combinacion = verificarCombinacion(fd); if(combinacion == 2) { operando = "null"; } else { ignorarEspacios(fd); operando = Etiqueta_Codop_Operando(fd,OPERANDO); } break; default: etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA); erroresEtiqueta(etiqueta); combinacion = verificarCombinacion(fd); if(combinacion == 2) { codop = "null"; erroresCodop(codop); operando = "null"; } else { ignorarEspacios(fd); codop = Etiqueta_Codop_Operando(fd,CODOP); erroresCodop(codop); combinacion = verificarCombinacion(fd); if(combinacion == 2) { operando = "null"; } else { ignorarEspacios(fd); operando = Etiqueta_Codop_Operando(fd,OPERANDO); } } break; } if((encontrado = buscarCodop(cabeza,codop)) == NULL) } ultimaLinea(codop); } else return 0; } booleano esComentario(FILE *fd) { int car; { if(car == ';') return 0; } return 1; } void buscarFinLinea(FILE *fd) { int car; ; } void ignorarEspacios(FILE *fd) { int car; do { }while(car == '\t' || car == ' '); } int verificarCombinacion(FILE *fd) { int car,combinacion; combinacion = 2; else combinacion = 1; return combinacion; } booleano esLetra(char caracter) { if((caracter >= 'A' && caracter <= 'Z')||(caracter >= 'a' && caracter <= 'z')) return 1; else return 0; } booleano esNumero(char caracter) { if(caracter >= '0' && caracter <= '9') return 1; else return 0; } char *Etiqueta_Codop_Operando(FILE *fd,int linea) { int car,lon = 0,pos; char *cadena,*ptr; if((linea == ETIQUETA)||(linea == CODOP)) { do { lon++; }while(car != '\t' && car != ' ' && car != '\n'); } else { do { lon++; }while(car != '\n'); } *ptr = '\0'; return cadena; } void ultimaLinea(char *codop) { } void quitarSaltosLinea(char *cadena) { char *ptr; *ptr = '\0'; } void listaTABOP(COD **cabeza) { int car; FILE *hc12; COD *ultimo = NULL; char *ins; { { if(car != '\t') { ins = Tabla_Operandos(hc12); buscarFinLinea(hc12); if(*cabeza == NULL) *cabeza = crearNodo(ins); else { ultimo = ultimoElemento(cabeza); insertarFinal(ins,ultimo); } } else buscarFinLinea(hc12); } } else } COD *ultimoElemento(COD **cabeza) { COD *ptr; ptr = *cabeza; while(ptr->sig != NULL) ptr = ptr->sig; return ptr; } char *Tabla_Operandos(FILE *hc12) { int car,lon = 0,pos; char *cadena; do { lon++; }while(car != '\t'); quitarSaltosLinea(cadena); return cadena; } COD *buscarCodop(COD *cabeza,char *codop) { COD *ptr; for(ptr = cabeza;ptr != NULL;ptr = ptr->sig) { if(ptr->instruccion == codop) return ptr; } return NULL; } void insertarFinal(char *ins,COD *ultimo) { ultimo->sig = crearNodo(ins); ultimo->sig->sig = NULL; ultimo = ultimo->sig; } COD *crearNodo(char *ins) { int tam; COD *x; x->sig = NULL; return x; }