Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/07/2004, 20:30
netoec84
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 19 años, 9 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 20:37