Para mi teoría de la clase de idiomas informáticos, obtuvimos una tarea para implementar un fragmento de código en un lenguaje que solo tiene sentencias while para control de flujo (no declaraciones if). Esto es principalmente para demostrar que puedes escribir un lenguaje de Turing completo con solo un ciclo while.El lenguaje while
Para aquellos de ustedes que puede entender las gramáticas de lenguaje, aquí están las reglas del lenguaje:
S -> S;S | while C do S od | id := E
E -> E + T | T | E - T
T -> T * F | F | F/T
F -> id | cons | (E)
C -> E = E | E > E | E < E | E >= E | E <= E | E != E | C and C | C or C | not(C)
Esto se copia de mis notas de clase, por lo que no me culpes si algo falta o es incorrecto!
El trozo de código para implementar es la siguiente:
if d = 0 do
x := 1
else
x := a/d
En cualquier caso, si desea seguir adelante y escribir que el uso de las reglas del lenguaje anterior, adelante. De lo contrario, adelante y escríbalo en el idioma en el que se sienta más cómodo. ¡Pero hay algunas advertencias!
- No si las declaraciones o cualquier otro tipo de control de flujo que no sean while loops.
- Sin trampa: la gramática anterior no incluye ninguna declaración de interrupción, declaraciones de devolución o excepciones. No los uses
Tengo mi pedazo de código escrito para este (que voy a publicar sólo para demostrar que esto no es un show me teh posterior codez). Sin embargo, soy un poco curioso de lo que otros puedan pensar.
+1 por tomar un esfuerzo extra para obtener más comentarios sobre la solución de la tarea. – Mostlyharmless