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

<br>entre las cosas que vas a tener que usar estan<br>maquinas de estado finito<br>automatas<br>mucha logica de punteros<br>con punteros a funciones probablemente te hagas la vida mas facil<br><br>no se para que lo tenes que hacer, pero hay muchos interpretes opensource que los podes embeber en tu programa.<br>

saludos<br>David<br><br><div class="gmail_quote">El 20 de marzo de 2011 13:31, Programante <span dir="ltr"><<a href="mailto:programante@gmail.com">programante@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

El 15/03/11 07:07, Abel escribió:<br>
<div class="im">> Hola a todos,<br>
> despues de mucho tiempo vuelvo a entrar al foro, talvez me puedan ayudar con el siguiente problema.<br>
> 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++.<br>


> Un ejemplo:<br>
> int a;<br>
> int b;<br>
><br>
> a=suma(2,5);<br>
> b=resta(3,1);<br>
><br>
> a=(2*b)-a;<br>
> return(a);<br>
><br>
> Las funciones suma() y resta() ya estarían declaradas en mi programa principal, asi que no necesitaría volverlas a declarar.<br>
> Mi idea es:<br>
> 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:<br>
> string="int a" (sin el punto y coma)<br>
> switch(string)        // aqui empieza mi problema, switch no acepta cadenas<br>
>        case "int a"   : int a; break;<br>
>        case "float a" : float a; break;<br>
>        case "char a"  : char a; break;<br>
>        case etc.....<br>
> 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?<br>
> Por toda idea que me puedan dar, les agradecería.<br>
> Saludos.<br>
> Abel.<br>
</div>Esto no hace lo que quieres. Tendrías que tener una estructura donde<br>
almacenar las variables del subprograma, luego interpretar cada comando<br>
y cambiar las variables según haga falta, tener en cuenta la prioridad<br>
de operadores... Programar un intérprete (o un compilador) es una tarea<br>
compleja, no aconsejo ir por esa ruta.<br>
<br>
Lo que puedes hacer es hacer como Dev-C++, que en realidad no te compila<br>
los programas, sino que llama a gcc para que realice él la compilación.<br>
<br>
Cuando tienes introducido el texto del programa, lo guardarías en un<br>
fichero, por ejemplo programa.c. Puedes incluir antes del código que<br>
introdujo el usuario includes, las funciones suma y resta, etc. (si sólo<br>
quieres añadir funciones, otra opción es añadirlas como una librería, lo<br>
que sería más rápido).<br>
Luego haces:<br>
if ( system( "gcc programa.c -o programa.exe") == 0 ) {<br>
  // Compiló correctamente<br>
 char buffer[1024];<br>
 FILE* resultado = popen("programa.exe", "r");<br>
 fgets(buffer, sizeof(buffer), resultado);<br>
 pclose(resultado);<br>
 printf("El resultado es %s", buffer);<br>
} else {<br>
 // gcc habrá escrito mensajes de error arriba<br>
 puts("No se pudo compiilar");<br>
<div><div></div><div class="h5">}<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>(")_(")signature to help him gain world domination. <br><br>