ILP (Iterprete para un Lenguaje Pila), un pequeño interprete para un sencillo lenguaje pila * Compilar * El ejecutable del interprete se obtiene con: $ make Si deseara instalar el interprete, simplemente copie src/ilp a /usr/local/bin. Si su compilador no soporta la directiva 'inline', edite config.h y comente la linea en la que se define HAS_INLINE. * Caracteristicas * - Tipos: enteros digitos o - y digitos (negativos) variables identificadores de a hasta z direcciones direccion de programa (ver :) - Operadores: + 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 == b < a b < -> a < b > a b > -> a > b ~ a ~ -> NOT a - Salida/Entrada: $ en pantalla valor apilado $$ en pantalla valor apilado con salto de linea " en pantalla literales hasta siguiente " secuencias de control: \n salto de linea \t tabulado \" comillas dobles \\ barra hacia la izquierda ? apila lectura entero por teclado - Bucles: : apila direccion ^ a b ^ -> salta a direccion a si b no es cero - Condicional: ! a ! bloque -> desapila a y ejecuta bloque si a es distinto de 0 - Otros: # comentario hasta encontrar salto de linea ; indica fin de bloque (ver condicional) . a . -> termina el programa devolviendo al sistema a por defecto los programas devuelven 0 * Problemas conocidos * - La cuenta de lineas se refiere a linea ejecutada, con lo que los bucles llevan a numeraciones confusas - La notacion apilar/operador es demencial :-) * 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" ; Un programa: "Tabla de multiplicar\nIntroduce el numero: " a ? = j 1 = i 10 = : " " a $ "x" j $ "=" a j * $$ j j 1 + = i i 1 - = i ^ 1 . # Un ejemplo sencillo Otro programa: : "El juego de las bombas\n\nHay 19 bombas y tenemos que tirar de 1 a 5 cada" " uno por turno.\nEl jugador que se queda con la ultima en la mano... " "pierde.\n\n" a 19 = : "hay " a $ " bombas, " : "cuantas bombas tiras? " b ? = b 5 > b 1 < + ! "no puedes tirar mas de 5 bombas ni menos de 1, " ; b 5 > b 1 < + ^ a a b - = c 6 b - = "quedan " a $ " bombas, yo tiro " c $$ a a c - = a 1 > ^ "queda 1 bomba y la tienes en la mano!\nHas perdido... Otra (0 " "para salir)? " b ? = b ^ 1 . # El juego de las bombas * Autor * Juan J. Martinez ***