Modifiche alla sintassi
Modificato secondo le specifiche originali di Malbolge.
This commit is contained in:
parent
16326aed3c
commit
c6af7a576a
@ -20,39 +20,51 @@ class Macchina:
|
|||||||
|
|
||||||
#Copia il programma nel registro c
|
#Copia il programma nel registro c
|
||||||
for indice, word in enumerate(programma):
|
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"," "):
|
if word not in ("\n"," "):
|
||||||
self.c[indice] = trinord(word)
|
self.c[indice] = trinord(word)
|
||||||
|
|
||||||
#Esecuzione del programma
|
#Esecuzione del programma
|
||||||
while self.puntatore_c < len(programma):
|
while self.puntatore_c < len(programma):
|
||||||
|
istruzione = self.__calcola_istruzione(trinchr(self.c[self.puntatore_c.decimale]))
|
||||||
#Determina l'istruzione da eseguire
|
if istruzione == "i":
|
||||||
istruzione = (self.c[self.puntatore_c.decimale] + self.puntatore_c) % 94
|
|
||||||
if istruzione == 4:
|
|
||||||
self.puntatore_c = self.d[self.puntatore_d.decimale]
|
self.puntatore_c = self.d[self.puntatore_d.decimale]
|
||||||
elif istruzione == 5:
|
elif istruzione == "/":
|
||||||
self.__stampa()
|
self.__stampa()
|
||||||
elif istruzione == 23:
|
elif istruzione == "<":
|
||||||
self.a = trinord(input())
|
carattere = input()
|
||||||
elif istruzione == 39:
|
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.__ruota()
|
||||||
self.a = self.d[self.puntatore_d.decimale]
|
self.a = self.d[self.puntatore_d.decimale]
|
||||||
elif istruzione == 40:
|
elif istruzione == "j":
|
||||||
self.puntatore_d = self.d[self.puntatore_d.decimale]
|
self.puntatore_d = self.d[self.puntatore_d.decimale]
|
||||||
elif istruzione == 62:
|
elif istruzione == "p":
|
||||||
self.__pazza()
|
self.__pazza()
|
||||||
self.a = self.d[self.puntatore_d.decimale]
|
self.a = self.d[self.puntatore_d.decimale]
|
||||||
elif istruzione == 68:
|
elif istruzione == "o":
|
||||||
self.__niente()
|
self.__niente()
|
||||||
elif istruzione == 81:
|
elif istruzione == "v":
|
||||||
self.__esci()
|
self.__esci()
|
||||||
else:
|
else:
|
||||||
self.__niente()
|
self.__niente()
|
||||||
if 33 <= istruzione <= 126:
|
self.c[self.puntatore_c.decimale] -= 33
|
||||||
self.__traduci()
|
self.__traduci()
|
||||||
self.puntatore_c += 1
|
self.puntatore_c += 1
|
||||||
self.puntatore_d += 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):
|
def __stampa(self):
|
||||||
print(trinchr(self.a), end="")
|
print(trinchr(self.a), end="")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user