![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Un lenguaje que inventé hace un tiempo y que, por fin, le he encontrado una aplicación (si aceptan un presupuesto que he hecho, claro
):Código:
0
@
1 +
DUP 3 %
0 = IF
"fizz" CALL:WRITE
FI
DUP 5 %
0 = IF
"buzz" CALL:WRITE
FI
DUP DUP 3 % SWAP 5 %
0 = SWAP 0 = & IF
DUP CALL:WRITE
FI
"" CALL:WRITELN
DUP 100 < IF
RET
FI
![]() ![]() Explicación: Este lenguaje es, en realidad, el "Ensamblador" de una máquina virtual basada en pilas, al estilo FORTH. DUP duplica el elemento en la cima de la pila, mientras que SWAP intercambia los dos valores de la cima. Los operadores extraen uno o dos elementos de la pila, lo operan y lo devuelven a la pila; y son los normales (+, -, >, <...) siendo "%" el cálculo del resto en una división entera. "CALL" llama a una rutina (WRITE y WRITELN en este caso). @ apila en la pila de código (separada de la pila de datos, como en FORTH) la dirección de dicha arroba, mientras que RET desapila la cima de la pila de código en el registro de ejecución. Vamos, muy sencillo. ![]() El código puede optimizarse duplicando e intercambiando los resultados de las operaciones (que en principio es más rápido que calcular el módulo y hacer comparaciones), pero entonces ya te lías...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment Última edición por Ñuño Martínez fecha: 13-02-2012 a las 11:16:20. |
|
#2
|
||||
|
||||
|
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
||||
|
||||
|
Ya dije en otro sitio lo de que sencillo no significa fácil y tal... De todas formas, a los que les guste el Ensamblador deberían entenderlo puesto que, aunque casi todos los microprocesadores están basados en registros, el manejo de pilas está al orden del día. Es más, casi todas las instrucciones de mi lenguaje tienen correspondencia directa con instrucciones ensamblador de casi cualquier micro, aunque eso de usar dos pilas separadas, una para datos y otra para direcciones de retorno, puede dar algún que otro dolor de cabeza.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment |
|
#4
|
||||
|
||||
|
No, si no es que me parezca complicado, es sólo que no me veo programando una gestión de stock de almacenes con ese lenguaje
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
||||
|
||||
|
Y digo yo.. ¿pa que lo haces a pilas puediendolo hacer a corriente? XDD
__________________
"la única iglesia que ilumina es la que arde" Anonimo |
|
#6
|
||||
|
||||
|
Oyes, pues yo pensaba que estabas hablando de pilas de lavar.
![]()
__________________
Be water my friend. |
|
#7
|
||||
|
||||
|
Que vivan las palabras polisémicas.
![]()
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment |
|
#8
|
||||
|
||||
|
Eso te pasa por no usar "stack", que queda más 'pofesional' y finolis
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#9
|
||||
|
||||
|
Cita:
![]()
__________________
Be water my friend. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|