Foros del Web » Programando para Internet » PHP »

Pseudo Interprete (basico) en-linea con PHP

Estas en el tema de Pseudo Interprete (basico) en-linea con PHP en el foro de PHP en Foros del Web. Que tal? en la materia de Traductores y Compiladores necesito crear un Pseudo Interprete basico on-line no se si el mejor lenguaje es PHP o ...
  #1 (permalink)  
Antiguo 19/07/2004, 21:30
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Pseudo Interprete (basico) en-linea con PHP

Que tal? en la materia de Traductores y Compiladores necesito crear un Pseudo Interprete basico on-line no se si el mejor lenguaje es PHP o me recomiendan algun otro? No soy experto en PHP y ya me tope con mi primer problema, este pseudo lenguaje acepta operaciones basicas (como: Mover, Asignación, Sumar, restar, Multiplicar, Dividir, Elevar al cuadrado, Sacar raiz cuadrada, Comparar por igual, Comparar por diferente, Comparar por mayor, Comparar por menor, Extraer elemento i de un vector, Poner un valor en la posición i de un vector, Incremente i y pruebe, Lectura desde teclado, Impresión a pantalla, stop y Definición zonas)de acuerdo a una sintaxis definida, mi problema se da especificamente en la accion de ingresar un dato por teclado ya que no se como traducirlo a PHP para que funcione, se me ocurre un formulario con un campo... pero el problema es que inicialmente lo habia pensado en traducir todo el codigo en el psudo lenguaje a PHP y grabarlo en un archivo para que luego este sea ejecutado por el interprete PHP, pero al grabarlo en un solo archivo PHP como procesaria el formulario? Seria mejor crear 2 archivos? alguna funcion?. Me dan alguna idea para resolver este problema? o alguna guia?

Al momento tengo es codigo:

Código PHP:
<?
$archivo 
file("prog.txt");
$lineas count($archivo);
$contenido "<?\n";

for(
$i=0$i $lineas$i++)
{
    
$codigo[] = explode ("\t"$archivo[$i]);
    
$operacion $codigo[$i][1][0].$codigo[$i][1][1];
    
$op1 $codigo[$i][1][2].$codigo[$i][1][3].$codigo[$i][1][4];
    
$op2 $codigo[$i][1][5].$codigo[$i][1][6].$codigo[$i][1][7];
    
$op3 $codigo[$i][1][8].$codigo[$i][1][9].$codigo[$i][1][10];

    if (
eregi("^[+]"$operacion))
    {
        echo 
"Operador +";
        switch (
$operacion[1])
        {
            case 
0:
                
$contenido .= '$var_' "$op3=$op1;\n";
                print 
" <i>Mover</i>";
                break;
            case 
1:
                print 
" <i>Sumar</i>";
                break;
            case 
2:
                print 
" <i>Multiplicar</i>";
                break;
            case 
3:
                print 
" <i>Elevar al cuadrado</i>";
                break;
            case 
4:
                print 
" <i>Comparar por igual</i>";
                break;
            case 
5:
                print 
" <i>Comparar por mayor</i>";
                break;
            case 
6:
                print 
" <i>Extraer elemento i de un vector</i>";
                break;
            case 
7:
                print 
" <i>Incremente i y pruebe</i>";
                break;
            case 
8:
                
$contenido .= "?><form action=\"\"><input type=text name=\"\$var_$op3\"></input> </form>\n<?";
                print 
" <i>Lectura desde teclado</i>";
                break;
            case 
9:
                print 
" <i>Stop</i>";
                break;
            default:
                print 
" <i>ERROR</i>";
        }
    }
    elseif (
eregi("^[-]"$operacion))
    {
        echo 
"Operador -";
        switch (
$operacion[1])
        {
            case 
0:
                
$contenido .= '$var_' $codigo[$i][0] . "=$op1$op2$op3;\n";
                print 
" <i>Asignar</i>";
                break;
            case 
1:
                print 
" <i>Restar</i>";
                break;
            case 
2:
                print 
" <i>Dividir</i>";
                break;
            case 
3:
                print 
" <i>Sacar raiz cuadrada</i>";
                break;
            case 
4:
                print 
" <i>Comparar por diferente</i>";
                break;
            case 
5:
                print 
" <i>Comparar por menor</i>";
                break;
            case 
6:
                print 
" <i>Poner un valor en la posicion i de un vector</i>";
                break;
            case 
7:
                print 
" <i>No definido</i>";
                break;
            case 
8:
                print 
" <i>Impresion en pantalla</i>";
                break;
            case 
9:
                print 
" <i>Definicion de zonas</i>";
                break;
            default:
                print 
" <i>ERROR</i>";
        }
    }
    else
    {
        echo 
"ERROR OPERADOR NO VALIDO";
    }
    echo 
"<br>";
    
}

$contenido .= "?>\n";

$fp fopen("traycomp.php","w+"); 
fwrite($fp$contenido); 
fclose($fp); 

?>
Subi estos dos archivos para la mejor comprension:
Tabla de como funciona el psuedo lenguaje:
http://descargas.portalquito.com/tablapsc.doc
Programa ejemplo escrito es el pseudo lenguaje:
http://descargas.portalquito.com/prog.txt

Espero su ayuda. Gracias!

Última edición por netoec84; 19/07/2004 a las 21:37
  #2 (permalink)  
Antiguo 20/07/2004, 08:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Vamos a ver ..

Si estás usando PHP como lenguaje de programación .. PHP por sí sólo puede trabajar con 3 tipos de "clientes":

1) Navegadores. Cuando configuras PHP bajo un servidor HTTP.
2) CLI. Comand Line Interface .. Para usarlo desde línea de comandos.
3) PHP-GTK. Para crear aplicaciones de escritorio.

Según los requerimientos de "on line" que dices .. y tal cual ya estás desarrollando tu aplicación estás usando PHP bajo servidor HTTP. En este caso tienes a los "clientes" que son los Navegadores (IE, Mozilla .. etc).

Para usar ese "cliente" Navegador usas lenguaje HTML/Javascript/flash/etc .. así que eso será lo que tendrás que usar para hacer tu "interface" con "PHP" para usarlo de entrada de datos desde "teclado" (con formularios HTML mínimo a no ser que uses Flash o applet java .. etc) y la salida a "pantalla" será también por HTML/javascript/flash/etc hacia ese "cliente" que es tu navegador.

Cuando interactuas con el "cliente" (en cliente-servidor) desde tus formularios HTML (por ejemplo) envias tus datos que ahí recolectas (en tus N campos de N tipos) esos datos y los envias a "procesar" a un script PHP que es el que indicas en tu "action" de ese <form> HTML.

El script de proceso PHP .. puede perfectametne aplicar toda la lógica que necesite tu "interprete" de tu psudo-lenguaje al instante (sin pasar por crear un archivo) y entregar su resultado en el mismo instante (flujo de proceso) sin tener que crear ningún archivo intermedio. Si quieres almacenar algo por el camino . .OK, pero no sería necesario según lo que requiera tu aplicación. Por la misma filosofía ..ahora usas "archivos de texto plano" .. pero podrías hacer más cosas como gestionarlo en base de datos, enviarlo por e-mail .. etc.

A todo esto .. Por los procesos que mencionas que ha de hacer tu aplicación .. Hasta con Javascript te sobraría para hacer todo eso, con la ventaja que das toda la carga de proceso al "cliente" (de hecho aquí no tendría razón de ser PHP). Ahora ... si requieres almacenar en el servidor (vía PHP) el resultado de todas estos procesos o datos originales .. OK, usa PHP.

Un saludo,
  #3 (permalink)  
Antiguo 20/07/2004, 21:58
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 0
Muchas gracias Cluster por tu respuesta... bueno en realidad me ha ayudado bastante... estoy realizando el pseudo interprete en php pero sin crear el archivo... ahora tengo problemas al conservar la información que guardo en las variables que se crean dinamicamente. Al inicio se crean totas las variables que en pseudo lenguaje se especifica y se inicializan con "0", todo funciona hasta que pide ingresar el dato, para lo que cree un formulario con un campo con el nombre de la variable en donde se debe guardar el valor, lo malo es que cuando se procesa se pierde el valor de las variables, estoy usando session_register(.....) para tratar de conservar todas las variables que se generan dinamicamente pero como he dicho cuando el formulario es procesado unicamente se conserva el valor que es ingresado en el formulario, no se cual es mi error, ojala me puedan ayudar... el codigo que estoy usando es este:

Código PHP:
<?
//include ("funciones.php");

$archivo file("prog.txt");
$lineas count($archivo);
//$contenido = "<?\n";

if (isset($dato)) $k $dato;
else 
$k 0;

for(
$i=$k$i $lineas$i++)
{
    
$codigo[$i] = explode ("\t"$archivo[$i]);
    
$operacion $codigo[$i][1][0].$codigo[$i][1][1];
    
$op1 $codigo[$i][1][2].$codigo[$i][1][3].$codigo[$i][1][4];
    
$op2 $codigo[$i][1][5].$codigo[$i][1][6].$codigo[$i][1][7];
    
$op3 $codigo[$i][1][8].$codigo[$i][1][9].$codigo[$i][1][10];
    
/*echo "<b>operacion:</b> " . $operacion;
    echo " <b>op1:</b> " . $op1;
    echo " <b>op2:</b> " . $op2;
    echo " <b>op3:</b> " . $op3;*/
    
if (eregi("^[+]"$operacion))
    {
        
//echo "Operador +";
        
switch ($operacion[1])
        {
            case 
0:
                
//$contenido .= '$var_' . "$op3=\$var_" . $op1 .";\n";
                
$nom_var1 'var_' "$op3"
                
$nom_var2 'var_' "$op1";
                
session_register("$nom_var1"); 
                $
$nom_var1 = $$nom_var2;
                print 
" <i><b>Movido:</b> $$nom_var2 a $$nom_var1</i>";
                break;
            case 
1:
                print 
" <i>Sumar</i>";
                break;
            case 
2:
                print 
" <i>Multiplicar</i>";
                break;
            case 
3:
                print 
" <i>Elevar al cuadrado</i>";
                break;
            case 
4:
                print 
" <i>Comparar por igual</i>";
                break;
            case 
5:
                print 
" <i>Comparar por mayor</i>";
                break;
            case 
6:
                print 
" <i>Extraer elemento i de un vector</i>";
                break;
            case 
7:
                print 
" <i>Incremente i y pruebe</i>";
                break;
            case 
8:
                echo 
IngresarDatos($codigo$i$op3);
                break 
2;
            case 
9:
                print 
" <i>Stop</i>";
                break;
            default:
                print 
" <i>ERROR</i>";
        }
    }
    elseif (
eregi("^[-]"$operacion))
    {
        
//echo "Operador -";
        
switch ($operacion[1])
        {
            case 
0:
                
//$contenido .= '$var_' . $codigo[$i][0] . "=$op1$op2$op3;\n";
                
$nom_var 'var_' $codigo[$i][0];
                
$cont_var "$op1$op2$op3";
                
session_register("$nom_var"); 
                $
$nom_var $cont_var;
                print 
" <i><b>Asignado:</b> $cont_var a $$nom_var</i>";
                break;
            case 
1:
                print 
" <i>Restar</i>";
                break;
            case 
2:
                print 
" <i>Dividir</i>";
                break;
            case 
3:
                print 
" <i>Sacar raiz cuadrada</i>";
                break;
            case 
4:
                print 
" <i>Comparar por diferente</i>";
                break;
            case 
5:
                print 
" <i>Comparar por menor</i>";
                break;
            case 
6:
                print 
" <i>Poner un valor en la posicion i de un vector</i>";
                break;
            case 
7:
                print 
" <i>No definido</i>";
                break;
            case 
8:
                print 
" <i>Impresion en pantalla</i>";
                break;
            case 
9:
                
$zona 1;
                print 
" <br><i><font color=\"red\">Fin de Definicion de zona <b>$zona</b> </font></i>";
                
$zona++;
                break;
            default:
                print 
" <i>ERROR</i>";
        }
    }
    else
    {
        echo 
"ERROR OPERADOR NO VALIDO";
    }
    echo 
"<br>";
    
}



//$contenido .= "-?->\n";

// $fp = fopen("traycomp.php","w+"); 
// fwrite($fp, $contenido); 
// fclose($fp); 

echo "<b>\$var_001:</b> " $var_001 "<br>";
echo 
"<b>\$var_005:</b> " $var_005 "<br>";
echo 
"<b>\$var_000:</b> " $var_000 "<br>";



function 
IngresarDatos ($codigo$i$op3)
{
        
$dato $i 1;
        @
$htmlID .= "<form name=\"datos\" method=\"post\" action=\"principal.php\">";
        @
$htmlID .= "<p><b>" $codigo[$i][2] . ":</b> <input type=\"text\" name=\"var_$op3\">";
        @
$htmlID .= "<input type=\"hidden\" name=\"dato\" value=\"$dato\"></p>";
        @
$htmlID .= "<p><input type=\"submit\" name=\"Submit\" value=\"Enviar...\"></p></form>";
        return 
$htmlID;
}

?>
Si quieren probarlo esta en esta dirección:
http://descargas.portalquito.com/principal.php
Si observan al final se imprimen 3 variables que a medida que se van procesando los formularios estas pierden su valor y solo lo conserva la ultima.

Gracias.

pd. el programa en el pseudo lenguaje esta en la misma direccion q' especifique en el anterior mensaje.
  #4 (permalink)  
Antiguo 21/07/2004, 08:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
SI el proceso de tus N formularios que recolectan datos (en los formularios) has de procesarlo en X páginas subsiguientes .. puedes usar sesiones como médio temporar de almacenamiento de variables para ese ciclo completo de N formularios.

Básicamente una sesión de PHP es un archivo de texto plano (por defecto) que gestiona PHP para crear/leer/borrar variables en el por tiempo limitado y todo con la seguridad que se crea en el "servidor" (podrías usar cookies también para este propósito).

(usa el buscador del foro por "sesioens" .. encontraras amplia información)

Un saludo,
  #5 (permalink)  
Antiguo 21/07/2004, 18:28
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 0
Pero en caso de que solo quiera procesarlo en un solo archivo? con un solo programa php... es posible???
  #6 (permalink)  
Antiguo 22/07/2004, 07:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si que puedes hacerlo todo en un mismo "script" ("programa") .. pero lo que tienes que tener claro es como funciona PHP:

PHP como lo usas funciona bajo "cliente-servidor" .. En tu "cliente" tienes a tu formulario y presentas los datos que el "servidor" genera. Cada vez que tu envias datos de tu formulario (cliente) al script PHP (servidor) estás haciendo una "petición" al servidor. PHP al terminar la ejecución de "una petición" de un script .. elimina toda variable usada, cierra conexiones .. etc entre otras cosas. Por ende .. si necesitas "conservar" N variables entre esos "procesos/peticiones" las tienes que almacenar en algún sitio "común" para el resto de peticiones que hagas a tu mismo script u otros, para eso tienes las sesiones.

EL hecho de que UN mismo script pueda hacer várias acciones ante diferentes "peticiones" (lease: apuntar un link a la misma página, un formulario que haga su "submit" a si mismo .. etc) es lo de menos .. cara a PHP y a tu servidor HTTP ya estás haciendo una "nueva petición" con los efectos que ves que sucede: "perdida de variables" que no es tan así .. sino que sucede por qué así funciona PHP en este entorno (y no sólo PHP, sino ASP, Perl, y cualquier lenguaje "del lado del servidor" ejecutandose bajo un servidor HTTP al cual se le "piede" ejecutar algo y este entrega su resultado y ahí queda todo esperando a que "vuelvas" a pedirle algo más .. sea lo mismo (el mismo script o proceso) o cualquier otro script).

Esta "teoría" es la que debes conocer si vas a realizar aplicaciones "cliente-servidor" .. por qué no es lo mismo que cuando realizas una aplicación "de escritorio" con VB, C .. etc donde el "programa" lo inicias una vez y todas las demás iteracciones con el mismo se producen ante eventos del própio programa que así los controlas (pulsación de teclas, movimiento del ratón .. lectura de datos de un puerto .. lecturas constantes de otro médio .. etc). Pero en "PHP" bajo "cliente-servidor" no es así, tu "pides" (al servidor) y el te "dá" (o ejecuta .. ) termina su ejecución y está a la espera de la próxima "petición".


Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:49.