diff --git a/main.py b/main.py new file mode 100644 index 0000000..75cbe4d --- /dev/null +++ b/main.py @@ -0,0 +1,63 @@ +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 + case "<": + pointer -= 1 + if pointer<0: + pointer = 0 + case "+": + try: + cell[pointer] += 1 + except: + cell.append(0) + cell[pointer] += 1 + case "-": + try: + cell[pointer] -= 1 + except: + cell.append(0) + cell[pointer] -= 1 + case ".": + if cell[pointer]==10 or cell[pointer]==13: + print("\n") + else: + print(chr(cell[pointer]), end="") + case ",": + cell[pointer] = ord(input("Enter a character: ")) + case "[": + loop_begin = i + loop_end = code.find("]", 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) + +if __name__ == '__main__': + main()