Category:Amazing Hopper: Difference between revisions

Content added Content deleted
Line 218: Line 218:
El stack almacena datos que serán los argumentos de las instrucciones HOPPER.
El stack almacena datos que serán los argumentos de las instrucciones HOPPER.


{DATO} ==> mete DATO al stack.
{DATO} ==> mete DATO al stack.


donde DATO puede ser:
donde DATO puede ser:


1) Una constante numérica, de cadena, un parámetro.
1) Una constante numérica, de cadena, un parámetro.
2) Un array.

2) Un array.


OBSERVACION. Pueden apilarse muchos datos en el stack, aunque el número de posiciones del stack es limitado (10), este puede ser cambiado con la cláusula .STACK. Ejemplo:
OBSERVACION. Pueden apilarse muchos datos en el stack, aunque el número de posiciones del stack es limitado (10), este puede ser cambiado con la cláusula .STACK. Ejemplo:
Line 320: Line 319:
Un control "!" mantiene un solo dato en el stack, partiendo desde el HEAD. Dos controles, "!!", mantienen los datos en la posición HEAD y HEAD+1 del stack. En general, El control "!(n)", mantiene "n" datos en el stack. Ejemplo:
Un control "!" mantiene un solo dato en el stack, partiendo desde el HEAD. Dos controles, "!!", mantienen los datos en la posición HEAD y HEAD+1 del stack. En general, El control "!(n)", mantiene "n" datos en el stack. Ejemplo:


// imprime todo el stack, pero lo mantiene gracias a "!!!"
// imprime todo el stack, pero lo mantiene gracias a "!!!"
{"Mensaje de Hopper: ",2000.9,"\n"}!!!print
{"Mensaje de Hopper: ",2000.9,"\n"}!!!print


// imprime otra vez el stack, pero esta vez lo consume.
// imprime otra vez el stack, pero esta vez lo consume.
{"\n"}print
{"\n"}print


Line 341: Line 340:
(Sobre el uso de variables, ver las secciones que hablan de ellas, a continuación)
(Sobre el uso de variables, ver las secciones que hablan de ellas, a continuación)


** MOVER un dato del stack a una variable:
** MOVER un dato del stack a una variable:
{100},mov(v)
{100},mov(v)
==> ahora, el stack está vacío, y v=100
==> ahora, el stack está vacío, y v=100


** COPIAR un dato del stack a una variable:
** COPIAR un dato del stack a una variable:
{"mensaje"},cpy(s)
{"mensaje"},cpy(s)
==> ahora, el stack continúa con "mensaje", pero s="mensaje"
==> ahora, el stack continúa con "mensaje", pero s="mensaje"
Line 364: Line 363:
genera la siguiente línea preprocesada:
genera la siguiente línea preprocesada:

postfix,{"mensaje"},len,{100},mul,postfix,n=0,mov(n)
postfix,{"mensaje"},len,{100},mul,postfix,n=0,mov(n)


Line 370: Line 369:
#compute{
#compute{
n:=( len("mensaje")*100 )
n:=( len("mensaje")*100 )
}
genera la siguiente línea:
genera la siguiente línea:
{"mensaje"},len,{100},mul,r=0,cpy(r)
{"mensaje"},len,{100},mul,r=0,cpy(r)

NOTA: si va a usar ":=", la expresión a asignar debe ser colocada entre paréntesis.
NOTA: si va a usar ":=", la expresión a asignar debe ser colocada entre paréntesis.


Line 381: Line 380:
HOPPER puede apilar una matriz o vector (un array), de dos maneras:
HOPPER puede apilar una matriz o vector (un array), de dos maneras:


1) copiando el puntero a la matriz (forma usual).
1) copiando el puntero a la matriz (forma usual).
2) copiando la matriz completa.

2) copiando la matriz completa.


Para copiar la matriz completa, se debe usar el control "@" antes de la variable.
Para copiar la matriz completa, se debe usar el control "@" antes de la variable.
Line 396: Line 394:
1.61907 1.90591
1.61907 1.90591
1.3727 1.84048
1.3727 1.84048

94.807 17.5982 ==> esto es "n" original, por 100 = t.
94.807 17.5982 ==> esto es "n" original, por 100 = t.
61.9072 90.5911
61.9072 90.5911
37.2703 84.048
37.2703 84.048

En cambio, si no se usa el control "@", solo copia el puntero.
En cambio, si no se usa el control "@", solo copia el puntero.
n=0, {2,3}rand array(n) // crea un array aleatorio de 3 filas y 2 columnas en "n"
n=0, {2,3}rand array(n) // crea un array aleatorio de 3 filas y 2 columnas en "n"
Line 411: Line 409:
1.8034 1.84302
1.8034 1.84302
1.93367 1.23961
1.93367 1.23961

157.044 147.523 ==> esto es "n" incrementado, por 100 = t.
157.044 147.523 ==> esto es "n" incrementado, por 100 = t.
180.34 184.302
180.34 184.302
Line 424: Line 422:


OBSERVACION 3. No se permiten instrucciones combinadas dentro de "{}". Observe que "++n" está fuera de "{}".
OBSERVACION 3. No se permiten instrucciones combinadas dentro de "{}". Observe que "++n" está fuera de "{}".



== CUESTIONES SINTACTICAS TRIVIALES ==
== CUESTIONES SINTACTICAS TRIVIALES ==