Category:Amazing Hopper: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 9:
 
HOPPER (Amazing Grace!), es un prototipo de máquina virtual, inspirado en las ideas de Grace Murray Hopper, pero llevadas un paso más allá. Su sintaxis corresponde a un "pseudo-ensamblador", y pretende ser una "gramática profunda", es decir, una gramática que permita sostener a otras gramáticas, definidas en el nivel del programador final, denominado "nivel de abstracción superior".
 
Cosiga una versión actualizada en el sitio Web:
 
https://github.com/DanielStuardo/Amazing-Hopper
 
Como prototipo, HOPPER es un programa cuya naturaleza responde a la investigación: ese es el motivo de su diseño y desarrollo.
Line 51 ⟶ 55:
== INSPIRACION ==
 
HOPPER es una aplicación práctica de una investigación realizada por el autor, sobre "gramáticas profundas" (al estilo "Wittgenstein", no teniendo nada que ver con el concepto elaborado por "Chomsky"), un soporte para la definición de cualquier forma o estilo de programación, ya sean lenguajes formales, como lenguajes naturales. Se trata, por lo tanto, de un prototipo que demuestra los resultados actuales de dicha investigación, y podría ser modificado en el futuro, gracias al avance de la misma.
 
En la década de los años 50 del siglo XX, Grace Murray Hopper, científica computacional estadounidense, buscaba la manera de escribir lenguajes de programación más cercanos al ser humano. En aquella época, los programadores debían programar en ensamblador. Los resultados de su esfuerzo, se traducen en un prototipo llamado FLOW-MATIC, y en el lenguaje COBOL, este último en uso en la actualidad.
Line 936 ⟶ 940:
back
OBSERVACION. GOSUB requiere un valor, de cualquier tipo simple. Si unano instrucciónhay XX?nada devuelveen un array de valores deel verdadstack, GOSUB arrojará un error.
 
=== PSEUDOFUNCIONES ===
Line 1,005 ⟶ 1,009:
 
Un contexto de este tipo permite definir una llamada especial a un contexto, con sinónimos para dicha llamada. Existen dos tipos de contextos de alto nivel: #CONTEXT y #CONTEXT-FREE. #CONTEXT define una llamada que se invoca consultando el stack por un valor de verdad TRUE: si es FALSE, no hay invocación. Por otro lado, #CONTEXT-FREE define una llamada simple.
#CONTEXT, internamente, usa lalas instruccióninstrucciones KEEP,GOSUB.
#CONTEXT-FREE, internamente, usa la instrucción JSUB.
 
Line 1,058 ⟶ 1,062:
 
8. Se puede adaptar un analizador de voz para codificar contextos de alto nivel.
 
 
== CODIGO DE ALTO NIVEL ==
Line 1,457 ⟶ 1,460:
==== SALTOS CON RETORNO ====
 
{A}gosub(ETIQUETA) Salta a ETIQUETA si A es TRUE (1), yo tiene
retornauna concadena BACK.no vacía, o un número distinto
de cero, o un array. Si el stack está vacío,
GOSUB arrojará error.
Retorna con BACK.
jsub(ETIQUETA) Salto incondicional a ETIQUETA, y retorna
con BACK.
Line 5,178 ⟶ 5,184:
 
/* sobrecarga de instrucciones aritmeticas naturales: MINUS */
#defn minusMINUS(_X_) #IF minus(#ATOMF) #ELSE #CMPLX;postfix;sub;postfix #EIF
 
MINUS es más rápido que SUB, pero solo admite una constante o una variable. La macro, sobrecargano puede sobrecargar al operador real, dándolepor lalo posibilidadque dese elegirhace elnecesario tipo de operaciónescribirla, segúnen laeste naturalezacaso, delcon argumentomayúscula.
 
{5}minus(x) ==> expande a: {5}minus(x)
{5}minusMINUS({x}mul by'10') ==> expande a: {5}{x}mul by'10';postfix;sub;postfix
 
Recordar que POSTFIX activa/desactiva el cálculo en notación polaca. Para el ejemplo, calculará 5 - x*10; sin POSTFIX, HOPPER calcularía x*10-5, y no cumpliría con el sentido de la operación MINUS.
 
 
=== #LOOP / #ENDLOOP, %LOOP / %ENDLOOP ===
543

edits