Modifiche alla sintassi

Modificato secondo le specifiche originali di Malbolge.
This commit is contained in:
Rnhmjoj 2013-03-27 16:59:07 +01:00
parent 16326aed3c
commit c6af7a576a

View File

@ -20,39 +20,51 @@ class Macchina:
#Copia il programma nel registro c
for indice, word in enumerate(programma):
if trinord(word) not in range(33,127):
raise SyntaxError("Carattere non consentito nel programma: %c a %d." % (word, indice))
if word not in ("\n"," "):
self.c[indice] = trinord(word)
#Esecuzione del programma
while self.puntatore_c < len(programma):
#Determina l'istruzione da eseguire
istruzione = (self.c[self.puntatore_c.decimale] + self.puntatore_c) % 94
if istruzione == 4:
istruzione = self.__calcola_istruzione(trinchr(self.c[self.puntatore_c.decimale]))
if istruzione == "i":
self.puntatore_c = self.d[self.puntatore_d.decimale]
elif istruzione == 5:
elif istruzione == "/":
self.__stampa()
elif istruzione == 23:
self.a = trinord(input())
elif istruzione == 39:
elif istruzione == "<":
carattere = input()
if len(carattere) > 1:
raise TypeError("Si attendeva un carattere: letta una stringa.")
elif len(carattere) == 0:
raise TypeError("Si attendeva un carattere: letta una stringa nulla.")
self.a = trinord(carattere)
elif istruzione == "*":
self.__ruota()
self.a = self.d[self.puntatore_d.decimale]
elif istruzione == 40:
elif istruzione == "j":
self.puntatore_d = self.d[self.puntatore_d.decimale]
elif istruzione == 62:
elif istruzione == "p":
self.__pazza()
self.a = self.d[self.puntatore_d.decimale]
elif istruzione == 68:
elif istruzione == "o":
self.__niente()
elif istruzione == 81:
elif istruzione == "v":
self.__esci()
else:
self.__niente()
if 33 <= istruzione <= 126:
self.__traduci()
self.c[self.puntatore_c.decimale] -= 33
self.__traduci()
self.puntatore_c += 1
self.puntatore_d += 1
#Determina l'istruzione da eseguire
def __calcola_istruzione(self, carattere):
tabella = "+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA\"lI.v%{gJh4G\-=O@5`_3i<?Z';FNQuY]szf$!BS/|t:Pn6^Ha"
istruzione = (trinord(carattere) - 33 + self.puntatore_c) % 94
return tabella[istruzione.decimale]
#Istruzioni
def __stampa(self):
print(trinchr(self.a), end="")