From c6af7a576a9f58742286131e09370d12eb24ae76 Mon Sep 17 00:00:00 2001 From: Rnhmjoj Date: Wed, 27 Mar 2013 16:59:07 +0100 Subject: [PATCH] Modifiche alla sintassi Modificato secondo le specifiche originali di Malbolge. --- malbolge/macchina.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/malbolge/macchina.py b/malbolge/macchina.py index d08fe46..1a14625 100644 --- a/malbolge/macchina.py +++ b/malbolge/macchina.py @@ -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