""" @author: Mateusz779 """ pointer = 0 cell = [] code = "" def main(): """ Main function """ global code, cell, pointer code = input("Enter the code: ") print("\n\n") if code != "": for i in range(len(code)): interpreter(code[i], i) print("\n\n") def interpreter(znak, i): """ Brainfuck interpreter > increment the data pointer (to point to the next cell to the right). < decrement the data pointer (to point to the next cell to the left). + increment (increase by one) the byte at the data pointer. - decrement (decrease by one) the byte at the data pointer. . output the byte at the data pointer. , accept one byte of input, storing its value in the byte at the data pointer. [ if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] ] if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [. """ global code, cell, pointer match znak: case ">": pointer += 1 if(pointer > len(cell) - 1): cell.append(0) case "<": pointer -= 1 if pointer < 0: pointer = 0 cell.insert(0, 0) case "+": try: cell[pointer] += 1 except: cell.append(0) cell[pointer] += 1 case "-": try: cell[pointer] -= 1 if cell[pointer] < 0: cell[pointer] = 0 except: cell.append(0) case ".": try: if cell[pointer] == 10 or cell[pointer] == 13: print("\n") else: print(chr(cell[pointer]), end="") except: cell.append(0) print(chr(cell[pointer]), end="") case ",": try: cell[pointer] = ord(input("Enter a character: ")) except: cell.append(0) cell[pointer] = ord(input("Enter a character: ")) case "[": try: loop_begin = i if cell[pointer] != 0: loop_end = code.find("]", i) for a in range(0, cell[pointer]-1): for j in range(1, loop_end-loop_begin): interpreter(code[loop_begin + j], loop_begin + j) except: cell.append(0) if __name__ == '__main__': main()