Lenguaje reMorse

reMorse es un lenguaje de programación esotérico inventado por Ryan Kusnery . Es un tarpit giratorio donde el código se parece al código Morse.

REMORSE consta de cuatro instrucciones. Las instrucciones de guión (-) y guión (- seguido de un espacio) seleccionan la operación siguiente y anterior, respectivamente, de una lista circular de siete operaciones. Dot (.) Y dotty (. Seguido de un espacio) realizan la operación y lo opuesto a la operación que se está seleccionando, respectivamente.

reMorse2, reMorse2.- y reMorse4ever son los dialectos de reMorse, entre los cuales solo reMorse2.- se reclama como Turing-completo .

Esta descripción general cubrirá el dialecto reMorse2.-, pero el término “reMorse” se utilizará en todas partes.

La especificación del idioma original es algo confusa y esta explicación puede contener errores y malas interpretaciones.

La sintaxis reMorse2.- es esencialmente binaria, pero usa el código morse “.” (punto) y “-” (guión) como sus dígitos. Los puntos y los guiones están emparejados, por lo que el idioma tiene cuatro instrucciones: ” .. “, ” .- “, ” -. ” Y ”  “. Todos los caracteres que no son puntos ni guiones se ignoran, por lo que los espacios en blanco y los comentarios (sin puntos ni guiones) se pueden incrustar en el código. (La sintaxis original de reMorse descrita en la vista previa es un poco más compleja que los descendientes de reMorse en sus reglas de análisis). Las instrucciones se ejecutan en secuencia a menos que ocurra un salto.

reMorse tiene 256 registros de 1 byte ordenados en una lista circular. Cada registro se inicializa con el valor de índice 0 de su lugar en la lista. Por tanto, el Registro 0 se inicializa con 00, el Registro 1 se inicializa con 01, y así sucesivamente. El “puntero de registro” realiza un seguimiento del “registro actual” e inicialmente comienza en el Registro 1 (NO en el Registro 0).

reMorse tiene una pila ilimitada para valores de 1 byte. En la práctica, la pila se parece más a una lista, porque el “puntero de la pila” no está necesariamente en la parte superior de la pila. El puntero de la pila apunta entre valores, por lo que puede tener o no un valor por debajo o por encima de él. Un push o pop solo afecta a los valores debajo del puntero de la pila. El “byte de pila” (si hay uno) es el byte de la pila justo debajo del puntero de pila.

Hay 9 pares de operación / contraoperación que se pueden realizar en reMorse (2.-). Están ordenados en una lista circular. También hay un “puntero de operación” que apunta al “par de operaciones” actual. Las instrucciones ”  ” y ” -. ” Aumentan / disminuyen el puntero de operación respectivamente. Las instrucciones ” .. ” y ” .- ” realizan la operación / contraoperación actual respectivamente. El puntero de operación comienza en el par de operaciones 1.

Las operaciones son las siguientes:

  1. Empuje el byte en el registro actual en la pila. Deje el registro sin cambios.
  2. Envíe el byte de la pila a STDOUT como un carácter ASCII. Deje la pila sin cambios.
  3. Mueva el puntero de la pila hacia arriba 1 (“empuje falso”). Esta operación provoca un error si el puntero de la pila está en la parte superior de la pila.
  4. Bit ordena el byte de la pila en su lugar.
  5. Y el byte de la pila con el registro actual, y reemplace el byte de la pila con el resultado.
  6. Dejó ROT el registro actual en su lugar.
  7. Agregue el byte de la pila y el registro actual, y reemplace el byte de la pila con el resultado. (Se supone que los desbordamientos se envuelven).
  8. Aumentar el puntero de registro por valor en el registro actual.
  9. Omita las siguientes N instrucciones, donde N es el registro actual. Si N es 00, esta operación no tiene ningún efecto. Si N es mayor que el número de instrucciones restantes, el programa termina.

Las respectivas contraoperaciones son las siguientes:

  1. Inserte el byte de la pila en el registro actual. Esta operación provoca un error si el puntero de la pila está en la parte superior de la pila.
  2. Inserte un byte de STDIN en la pila.
  3. Mueva el puntero de la pila hacia abajo 1 (“pop falso”). Esta operación provoca un error si el puntero de la pila está en la parte inferior de la pila.
  4. El bit inverso ordena el byte de la pila en su lugar.
  5. NO el byte de pila en su lugar.
  6. Derecha ROT el registro actual en su lugar.
  7. Reste el registro actual del byte de la pila y reemplace el byte de la pila con el resultado. (Se supone que los subdesbordamientos se envuelven).
  8. Disminuir el puntero de registro por valor en el registro actual.
  9. Regrese N instrucciones, donde N es el registro actual. Si N es 00, esta operación no tiene ningún efecto. Si N es mayor que el número de instrucciones anteriores, se produce un error. Si N es 01, se ingresa un bucle infinito.

reMorse2 es un dialecto de reMorse pero Turing completo (es decir sólo con punto y barra como instrucciones). Un ejemplo de código en este lenguaje sería:

Entradas relacionadas

Dejar un Comentario