[C con Clase] Crear un compilador

David Fire ddfire en gmail.com
Dom Mar 20 17:45:19 CET 2011


hola
lo que queres hacer se llama interprete.
sin animos de ofender, pero si no sabes que se llama interprete,
probablemente esta lejos de tus conocimientos.
en la universidad son dos materias correlativas en donde en la segunda se
estudia como hacer un interprete y/o un compilador.

entre las cosas que vas a tener que usar estan
maquinas de estado finito
automatas
mucha logica de punteros
con punteros a funciones probablemente te hagas la vida mas facil

no se para que lo tenes que hacer, pero hay muchos interpretes opensource
que los podes embeber en tu programa.
saludos
David

El 20 de marzo de 2011 13:31, Programante <programante en gmail.com> escribió:

> El 15/03/11 07:07, Abel escribió:
> > Hola a todos,
> > despues de mucho tiempo vuelvo a entrar al foro, talvez me puedan ayudar
> con el siguiente problema.
> > Quiero escribir un programa, el que me mostrará un espacio vacío para
> llenar un texto. En este espacio vacío, el usuario podra escribir código C
> (solo un comando por línea), despues lo podrá hacer correr y obtendrá los
> mismos resulatdos que obtendría haciendolo correr por ejemplo con el Dev
> C++.
> > Un ejemplo:
> > int a;
> > int b;
> >
> > a=suma(2,5);
> > b=resta(3,1);
> >
> > a=(2*b)-a;
> > return(a);
> >
> > Las funciones suma() y resta() ya estarían declaradas en mi programa
> principal, asi que no necesitaría volverlas a declarar.
> > Mi idea es:
> > Empezaría a leer línea por línea el texto, cada línea lo almaceno en un
> "string" y a travez de un switch(string)lo busco y si lo encuentra ejecuto
> ese comando; por ejemplo la primera línea:
> > string="int a" (sin el punto y coma)
> > switch(string)        // aqui empieza mi problema, switch no acepta
> cadenas
> >        case "int a"   : int a; break;
> >        case "float a" : float a; break;
> >        case "char a"  : char a; break;
> >        case etc.....
> > el mayor problema lo tengo en la quinta línea: a=(2*b)-a; cómo hago de
> una manera sencilla que me realice esta operación?
> > Por toda idea que me puedan dar, les agradecería.
> > Saludos.
> > Abel.
> Esto no hace lo que quieres. Tendrías que tener una estructura donde
> almacenar las variables del subprograma, luego interpretar cada comando
> y cambiar las variables según haga falta, tener en cuenta la prioridad
> de operadores... Programar un intérprete (o un compilador) es una tarea
> compleja, no aconsejo ir por esa ruta.
>
> Lo que puedes hacer es hacer como Dev-C++, que en realidad no te compila
> los programas, sino que llama a gcc para que realice él la compilación.
>
> Cuando tienes introducido el texto del programa, lo guardarías en un
> fichero, por ejemplo programa.c. Puedes incluir antes del código que
> introdujo el usuario includes, las funciones suma y resta, etc. (si sólo
> quieres añadir funciones, otra opción es añadirlas como una librería, lo
> que sería más rápido).
> Luego haces:
> if ( system( "gcc programa.c -o programa.exe") == 0 ) {
>  // Compiló correctamente
>  char buffer[1024];
>  FILE* resultado = popen("programa.exe", "r");
>  fgets(buffer, sizeof(buffer), resultado);
>  pclose(resultado);
>  printf("El resultado es %s", buffer);
> } else {
>  // gcc habrá escrito mensajes de error arriba
>  puts("No se pudo compiilar");
> }
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
 (\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110320/cf440728/attachment.html>


Más información sobre la lista de distribución Cconclase