Herramientas de usuario

Herramientas del sitio


compiladores:programas_de_ejemplo

¡Esta es una revisión vieja del documento!


Programas de ejemplos para probar el intérprete

Exponenciación Factorial División División (con falla)
 
?x;
?y;
r:=1;
while y>0 do
	r:=r*x;
	y:=y-1
od;
!r
 
y:=1;
f:=1;
?x;
while x>=y do 
     f:=f*y;
     y:=y+1 
od;
!f 
 
q:=0;
?x;
?y;
r:=x;
while r>=y do 
     q:=q+1;
     r:=r-y 
od;
!r;
!q
q:=0;
?x;
?y;
if y=0 
then fail DivZero 
else 
	r:=x;
	while r>=y do 
     		q:=q+1;
	     	r:=r-y 
	od;
	!q;
	!r
fi
Exponenciación (mejorado) Fibonnaci de un número Fibonnaci desde 1 hasta un número
 
catch ExpNeg in
?x;
?y;
if y<0 then 
	fail ExpNeg
else
	r:=1;
	while y>0 do
		r:=r*x;
		y:=y-1
	od;
	!r
fi
{fail CanNotDealWithReals}
n1:=0;
n2:=1;
?x;
y:=0;
for i:=1 to x do
	newvar t:=n1+n2 {
		n1:=n2;
		n2:=t 
	};
	i:=i+1
od;
!n2 
n1:=0;
n2:=1;
?x;
y:=0;
for i:=1 to x do
	newvar t:=n1+n2 {
		n1:=n2;
		n2:=t 
	};
        !n2;
	i:=i+1
od
Primo o compuesto (muy ineficiente)
 
?x;
i:=2;
while i<x do
	if x rem i=0 then break
                      else i:=i+1
	fi
od;
if i<x then fail NotPrime
       else fail Prime
fi

Interfaz gráfica para el intérprete

Si quieren probar la interfaz gráfica para el intérprete del proyecto pueden usar como punto de partida los siguientes archivos.

Algunas apostillas para facilitarles la investigación:

  • Usa Gtk2Hs el binding de Haskell para Gtk2.
  • De acuerdo a como tengan definido sus tipos de datos (especialmente Omega), deberán hacer los cambios correspondientes.
  • La interfaz de consola es una función
    run :: Omega Int -> IO ()
  • La interfaz gráfica es una función
    runGtk :: Omega Int -> IO ()
  • Por otro lado tengo una función
    execStrGen :: (Omega Int -> IO ()) -> (String -> IO ()) -> String -> IO ()

    donde el primer argumento es la función para ejecutar el código (el tercer argumento) y el segundo argumento es una función que sabe que hacer en caso de error durante el parseo.

  • Si ustedes tienen definida una función parecida a execStrGen, entonces lo “único” que tienen que hacer es pasarle como argumento a esa función la función runGtk.
  • Si quieren tener el coloreado de sintáxis en el editor tienen que copiar el archivo imp.lang en $HOME/.gnome2/gtksourceview-1.0/language-specs/.
  • Para obtener un archivo LaTeX con los comentarios y el codigo “pretty-printed” uso Lhs2TeX.

Archivo

El tar contiene:

  • Gui.lhs: el código para manejar la interfaz gráfica,
  • Makefile: para compilar (tiene un pequeño error de dependencias, pero es fácil de solucionar)
  • imp.lang: para tener coloreado de sintáxis
  • Ui.glade: la definición de la interfaz gráfica con Glade2.
compiladores/programas_de_ejemplo.1147301383.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)