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
|
||||
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="")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user