Universidad Catlica Boliviana San Pablo, Maestra en Ingeniera en Computacin, Construccin de Compiladores 1
ResumenEl laboratorio trata de elaborar un programa que lea
una cadena de caracteres con enteros y signos de suma, el programa debe poder detectar errores en la cadena y de no existir errores debe devolver el resultado de la suma.
A idea al elaborar el programa fue utilizar comandos de lectura de caracteres y as diferenciar el tipo de carcter con una base de comparacin almacenada en vectores, y para no sobrecargar la memoria, se utilizo programacin de memoria dinmica.
La idea del programa es leer carcter por carcter ingresado en la cadena, si lee un nmero el caracter ser almacenado y se proceder al siguiente caracter, si este es otro nmero se proceder a concatenar con el caracter previo, si es el smbolo de suma almacenara el caracter o caracteres previos y as sucesivamente hasta que termine de leer la cadena, al finalizar la lectura de cadena se procede a sumar todos los elementos de la misma.
Si en algn punto de la cadena se detecta alguna condicin de error el programa informa del mismo y se detiene.
Este es el cdigo del programa:
# include <stdio.h> # include <stdlib.h> char prog1[100]="#include <stdio.h> \n#include <stdlib.h>\nmain(){ printf("; char prog2[]={ '"','R','e','s','u','l','t','a','d','o','=','%','d','"',',','\0'}; char prog4[]={ ')',';','}','\0'};
char carac,pcarac=0,otro=0; int numero,multi=1,respop=0,respopaux=0;
{ struct nodo *n1,*nu,*a; int n,i; if(argc<3) { printf("Introducir dos argumentos\n"); printf("C para archivo para GCC\n"); printf("1 para ver resultado\n"); return 1; }
} else{ otro=1; } } while(otro!=1); a->num=numero; a->op=32; } else{ a->num=0; a->op=carac; pcarac++; } nu->apunta=a; a->apunta=NULL; nu=a; } while(carac!='\0'); a=n1->apunta; do { printf("%d %c \a en la direccion %X\n",a->num,a- Laboratorio Nro. 1 - (Junio 2013) Ing. Pablo Fernando Torrejon Ortega. L Universidad Catlica Boliviana San Pablo, Maestra en Ingeniera en Computacin, Construccin de Compiladores 2 >op,a->apunta); a=a->apunta; } while (a!=NULL);
a=n1; respop=0; respopaux=0; do { a=a->apunta;
switch(a->op) { case '+':{ respop=respopaux+respop; respopaux=0; break;} default:{ respopaux=a->num; break;} } } while (a->apunta!=NULL); respop=respop+a->num; printf("La suma es %d \a\n",respop); getch(); return 0; } if(!strcmp(argv[1],"-c")) { FILE *fp; if((fp=fopen("prog1.c","w"))==NULL) { printf("No se puede abrir el archivo \n"); return 1; } strcat(prog1,prog2); strcat(prog1,argv[2]); strcat(prog1,prog4); printf("\n %s \n",prog1); fwrite(prog1,sizeof(prog1),1,fp);