About
Games
Software
Este es un pequeño intérprete para un lenguaje pila (stack language) que hize en un par de tardes de aburrimiento preparando material para dar clases de programación en C, intentando demostrar la potencia de una simple pila.
Lamentablemente (creo) me intusiasmé demasiado y, aunque no es nada complejo, el intéprete no me vale para las clases.
En cualquier caso aquí está.
He numerado 1.0 la primera versión pública, aunque no se si habrán más versiones si no es para corregir errores. Pero, ¿quién sabe? ;)
De todas formas no deja de ser un toy language solo interesante para programadores que quieran experimentar con la programación de compiladores o intérpretes.
Agosto de 2003
ILP es un intérprete para un lenguaje pila, aunque sería más correcto decir basado en una pila. La principal característica, que sin duda recordará a lenguajes de uso extendido como forth, es su notación polaca inversa (por ejemplo, 1+1 se escribe 1 1 +).
El leguaje es sencillo y contiene estructuras básicas para implementar bucles, condicionales y entrada/salida básica. Lo suficiente para crear sencillos programas.
Todo ello por debajo de las 1000 lineas de código (contando los comentarios), que permite que sea fácil entender y extender el intérprete.
| Tipo | Descripción |
| enteros | digitos o - y digitos (negativos) |
| variables | identificadores de a hasta z |
| direcciones | dirección de programa (ver :) |
| Operador | Notación | Descipción |
| + | a b + | a + b |
| - | a b - | a - b |
| / | a b / | a / b |
| * | a b * | a * b |
| = | a b = | a = b |
| E | a b E | a EQUAL b |
| < | a b < | a < b |
| > | a b > | a > b |
| ~ | a ~ | NOT a |
| Función | Descripción |
| $ | en pantalla valor apilado |
| $$ | en pantalla valor apilado con salto de linea |
| " | en pantalla literales hasta siguiente "
secuencias de control: \n salto de linea |
| ? | apila lectura entero por teclado |
| Función | Descripción |
| : | apila dirección |
| ^ | Notación a b ^ (salta a dirección a si b no es cero) |
| Función | Descripción |
| ! | Notación a ! bloque (desapila a y ejecuta bloque si a es distinto de cero) |
| Función | Descripción |
| # | comentario hasta encontrar salto de linea |
| ; | indica fin de bloque (ver condicional) |
| . | Notación a . (termina el programa devolviendo al sistema a, por defecto los programas devuelven cero) |
Ejemplos
Algunas comparaciones con C:
/* en C */
for(i=0;i<10;i++)
printf("iteracion %i\n",i);
|
# en LP i 0 = : "iteracion " i $$ i i 1 + = # esto es i=i+1 i 10 < ^ |
/* en C */
if(a==b)
printf("a es igual a b");
else
{
if(a>b)
printf("a es mayor que b");
else
printf("a es menor que b");
}
|
# en LP (no hay equivalente a 'else') a b E ! "a es igual a b" ; a b > ! "a es mayor que b" ; a b < ! "a es menor que b" ; |
El autor de ILP es:
Juan J. Martinez <jjm *at* usebox.net>
Mi página personal se encuentra aquí.
Cualquier comentario, corrección o mejora será bienvenida.
ILP se distribuye bajo licencia X11/MIT. Puede consultar la licencia aquí.
Los fuentes están preparados para compilar en cualquier UN*X (GNU/Linux, *BSD, ...) y con suerte solo será necesario hacer make en la mayoría de los sistemas.
ILP Versión 1.0.1
| Source | ilp-1.0.1.tar.gz | MD5 3b9dc03ed2b10f286b4e240b777bf3bf |
Documentación incluida en el paquete: LEEME (español), README (english), CHANGELOG.
Versiones anteriores:
| Source | ilp-1.0.tar.gz | MD5 d25f33e427d7c3b7b1e0f3f14d419ffa |
Hay un port ya compilado para Win32:
ilp-1.0-win32.zip.
Parece funcionar, aunque no lo he probado demasiado.
Última actualización: 29 de Septiembre 2003