;ejemplo con errores
Et12_xyz123 ADCA 1,PC
%ET3 LDAA #$90
Netq%23 RMB 556
etv1
XYZ Ldaaxyz 4
%XYZ
a.c. %1111000
Abc SWI%
y el codigo me tiene que imprimir esto
COMENTARIO
ETIQUETA = Et12_xyz123
CODOP =ADCA
OPERANDO = 1,PC
.....
....
....
y asi con todas las lineas, pero me imprime
COMENTARIO
NO SE ENCONTRO CODOP
y no entiendo por que imprime esto ultimo si solo en las lineas que no son comentarios me tiene que verificar si se encontro el codop o no
el codigo es este:
Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define LONG_ETIQUETA 8 #define LONG_CODOP 5 #define COMENTARIO ';' #define TABULADOR '\t' #define ESPACIOS_ ' ' #define MAX 8 #define MAXIMO 40 typedef enum {FALSO,VERDADERO} booleano; typedef enum {ETIQUETA,CODOP,OPERANDO} linea; typedef enum {INS,OP,DIR,MAQ,CALCULADO,CALCULAR,TOTAL} tabla; typedef struct nodo { char *instruccion; char *operando; char **modo_direccionamiento; char **codigo_maquina; char **bytes_calculados; char **bytes_x_calcular; char **suma_bytes; int tipo_linea; struct nodo *sig; }COD; void imprimirInfo(COD *p); int verificarCombinacion(FILE *fd); booleano esComentario(FILE *fd); char *Etiqueta_Codop_Operando(FILE *fd,int linea); char *_Codop_Operando(FILE *fd,int linea); void ultimaLinea(char *codop); void erroresEtiqueta(char *etiqueta); void erroresCodop(char *codop); void buscarFinLinea(FILE *fd); void ignorarEspacios(FILE *fd); void listaTABOP(COD **cabeza); COD *ultimoElemento(COD **cabeza); COD *crearNodo(char *ins,char *op,char **dir,char **maq,char **cal,char **x_cal,char **sum,int n); void insertarFinal(char *ins,char *op,char **dir,char **maq,char **cal,char **x_cal,char **sum,COD *ultimo,int n); char *Tabla_Operandos(FILE *hc12,int tabla); COD *buscarCodop(COD *cabeza,char *codop); void quitarSaltosLinea(char *cadena); booleano esNumero(char caracter); booleano esLetra(char caracter); void verificarOperando(COD *encontrado,char *operando); int main() { FILE *fd; int car,combinacion; COD *cabeza = NULL,*encontrado = NULL; char nombre[MAXIMO],archivo[MAXIMO],respuesta,*etiqueta,*codop,*operando; listaTABOP(&cabeza); do { quitarSaltosLinea(nombre); { { 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) else { verificarOperando(encontrado,operando); imprimirInfo(encontrado); } } } ultimaLinea(codop); } else }while(respuesta == 'S' || respuesta == 's'); 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; if((linea == ETIQUETA)||(linea == CODOP)) { do { lon++; }while(car != '\t' && car != ' ' && car != '\n'); } else { do { lon++; }while(car != '\n'); } quitarSaltosLinea(cadena); return cadena; } void erroresEtiqueta(char *etiqueta) { int tam,i = 0,esEtiqueta = 1; if(tam > LONG_ETIQUETA) if(!esLetra(etiqueta[i])) else { for(i = 0;(i < tam)&&(esEtiqueta);i++) { if((!esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&&(etiqueta[i] != '_')) esEtiqueta = 0; } if(!esEtiqueta) printf("\tError:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n"); } } void erroresCodop(char *codop) { int tam,i = 0,esCodop = 1,punto = 0; if(tam > LONG_CODOP) else { if(!esLetra(codop[i])) else { for(i = 1;(i < tam)&&(esCodop)&&(punto>=0&&punto<=1);i++) { if((!esLetra(codop[i]))&&(codop[i] != '.')) esCodop = 0; else if(codop[i] == '.') punto++; } if(!esCodop) printf("\tError:los caracteres validos en un codigo de operacion son letras y el caracter punto\n"); if(punto > 1) } } } void ultimaLinea(char *codop) { int lon1,lon2,i; if(lon1 != lon2) else { for(i = 0;codop[i];i++) } } void quitarSaltosLinea(char *cadena) { char *ptr; *ptr = '\0'; } void listaTABOP(COD **cabeza) { int car,i,pos,n; FILE *hc12; COD *ultimo = NULL; char *ins,*op,**dir,**maq,**cal,**x_cal,**sum; { { i = 0; ins = Tabla_Operandos(hc12,INS); ignorarEspacios(hc12); op = Tabla_Operandos(hc12,OP); buscarFinLinea(hc12); { n = 0; ignorarEspacios(hc12); dir[i] = Tabla_Operandos(hc12,DIR); ignorarEspacios(hc12); maq[i] = Tabla_Operandos(hc12,MAQ); ignorarEspacios(hc12); cal[i] = Tabla_Operandos(hc12,CALCULADO); ignorarEspacios(hc12); x_cal[i] = Tabla_Operandos(hc12,CALCULAR); ignorarEspacios(hc12); sum[i] = Tabla_Operandos(hc12,TOTAL); buscarFinLinea(hc12); } else { n = 1; do { ignorarEspacios(hc12); dir[i] = Tabla_Operandos(hc12,DIR); ignorarEspacios(hc12); maq[i] = Tabla_Operandos(hc12,MAQ); ignorarEspacios(hc12); cal[i] = Tabla_Operandos(hc12,CALCULADO); ignorarEspacios(hc12); x_cal[i] = Tabla_Operandos(hc12,CALCULAR); ignorarEspacios(hc12); sum[i] = Tabla_Operandos(hc12,TOTAL); buscarFinLinea(hc12); i++; } if(*cabeza == NULL) *cabeza = crearNodo(ins,op,dir,maq,cal,x_cal,sum,n); else { ultimo = ultimoElemento(cabeza); insertarFinal(ins,op,dir,maq,cal,x_cal,sum,ultimo,n); } } } else } COD *ultimoElemento(COD **cabeza) { COD *ptr; ptr = *cabeza; while(ptr->sig != NULL) ptr = ptr->sig; return ptr; } char *Tabla_Operandos(FILE *hc12,int tabla) { int car,lon = 0,pos; char *cadena; if((tabla==INS)||(tabla==OP)||(tabla==DIR)||(tabla==MAQ)||(tabla==CALCULADO)||(tabla==CALCULAR)) { do { lon++; }while(car != '\t' && car != EOF); } else { do { lon++; }while(car != '\n' && car != EOF); lon--; } quitarSaltosLinea(cadena); return cadena; } COD *buscarCodop(COD *cabeza,char *codop) { int i; COD *ptr; for(i = 0;codop[i];i++) for(ptr = cabeza;ptr != NULL;ptr = ptr->sig) { return ptr; } return NULL; } void insertarFinal(char *ins,char *op,char **dir,char **maq,char **cal,char **x_cal,char **sum,COD *ultimo,int n) { ultimo->sig = crearNodo(ins,op,dir,maq,cal,x_cal,sum,n); ultimo->sig->sig = NULL; ultimo = ultimo->sig; } COD *crearNodo(char *ins,char *op,char **dir,char **maq,char **cal,char **x_cal,char **sum,int n) { int tam,tam1,tam2,tam3,i; COD *x; x->tipo_linea = n; if(n == 1) { for(i = 0;i < MAX;i++) { } } else { } x->sig = NULL; return x; } void verificarOperando(COD *encontrado,char *operando) { { } { } } void imprimirInfo(COD *p) { int i,num_lineas; if(p->tipo_linea == 1) num_lineas = MAX; else num_lineas = 1; for(i = 0;i < num_lineas;i++) { } }
gracias de antemano