From 17fd5f7acfa8d64b3ce38e00df442cb09c3be9b3 Mon Sep 17 00:00:00 2001 From: Cormac Shannon Date: Thu, 10 Apr 2025 14:24:55 +0100 Subject: [PATCH] Fix: rename enterpreter to interpreter --- pyproject.toml | 15 +++++--- src/brainfuck/__brainfuck.py | 12 +++---- src/brainfuck/__main__.py | 36 +++++++++++++++++++ src/enterpreter/__init__.py | 3 -- src/interpreter/__init__.py | 3 ++ .../__interpreter.py} | 5 +-- src/{enterpreter => interpreter}/__main__.py | 0 .../util/__init__.py | 0 .../util/hexdump.py | 0 uv.lock | 2 +- 10 files changed, 59 insertions(+), 17 deletions(-) delete mode 100644 src/enterpreter/__init__.py create mode 100644 src/interpreter/__init__.py rename src/{enterpreter/__enterpreter.py => interpreter/__interpreter.py} (94%) rename src/{enterpreter => interpreter}/__main__.py (100%) rename src/{enterpreter => interpreter}/util/__init__.py (100%) rename src/{enterpreter => interpreter}/util/hexdump.py (100%) diff --git a/pyproject.toml b/pyproject.toml index 159d86c..61f0d5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,18 @@ [project] -name = "enterpreter" +name = "interpreter" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.10" -dependencies = [ - "colorama>=0.4.6", - "cython>=3.0.12", -] +dependencies = ["colorama>=0.4.6", "cython>=3.0.12"] + +[project.scripts] +bf = "brainfuck.__main__:main" +brainfuck = "brainfuck.__main__:main" [tool.uv] package = true + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" diff --git a/src/brainfuck/__brainfuck.py b/src/brainfuck/__brainfuck.py index b911b76..2f57b84 100644 --- a/src/brainfuck/__brainfuck.py +++ b/src/brainfuck/__brainfuck.py @@ -1,6 +1,7 @@ from sys import stdin, stdout from os import PathLike -from enterpreter import Enterpreter, opcode +from interpreter import Interpreter, opcode +from pathlib import Path BrainFuckByteCode = { @@ -31,7 +32,7 @@ class BrainFuckByteCodeCompiler: ) -class BrainFuckEnterpreter(Enterpreter): +class BrainFuckInterpreter(Interpreter): @opcode(BrainFuckByteCode[">"]) def forward(self): self._memory_pointer += 1 @@ -84,12 +85,12 @@ class BrainFuckEnterpreter(Enterpreter): return search_pointer -def bf(program_path: PathLike, bits=8, mem=2**8) -> BrainFuckEnterpreter: +def bf(program_path: PathLike, bits=8, mem=None) -> BrainFuckInterpreter: bf_c = BrainFuckByteCodeCompiler() bf_c.load_file(program_path) program = bf_c.compile() - bf_e = BrainFuckEnterpreter(bits=bits, memsize=mem) + bf_e = BrainFuckInterpreter(bits=bits, memsize=mem) bf_e.load_program(program) bf_e.run() @@ -97,7 +98,6 @@ def bf(program_path: PathLike, bits=8, mem=2**8) -> BrainFuckEnterpreter: if __name__ == "__main__": - from pathlib import Path - bf(Path("examples", "HelloWorld.bf")) bf(Path("examples", "GameOfLife.bf"), bits=16, mem=2**16) + bf(Path("examples", "Mandlebrot.bf"), bits=16, mem=2**16) diff --git a/src/brainfuck/__main__.py b/src/brainfuck/__main__.py index e69de29..0be27b5 100644 --- a/src/brainfuck/__main__.py +++ b/src/brainfuck/__main__.py @@ -0,0 +1,36 @@ +import argparse +from pathlib import Path +from .__brainfuck import bf + + +def main(): + parser = argparse.ArgumentParser( + description="Brainfuck interpreter using a custom compiler and virtual machine." + ) + + parser.add_argument( + "file", type=Path, help="Path to the Brainfuck program file (.bf)" + ) + parser.add_argument( + "-b", + "--bits", + type=int, + default=8, + help="Bit width of each memory cell (default: 8)", + ) + parser.add_argument( + "-m", "--mem", type=int, default=None, help="Size of memory tape (default: 256)" + ) + + args = parser.parse_args() + + # Validate file existence + if not args.file.exists(): + parser.error(f"File not found: {args.file}") + + # Run the brainfuck program + bf(program_path=args.file, bits=args.bits, mem=args.mem) + + +if __name__ == "__main__": + main() diff --git a/src/enterpreter/__init__.py b/src/enterpreter/__init__.py deleted file mode 100644 index 06c68aa..0000000 --- a/src/enterpreter/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .__enterpreter import Enterpreter, opcode - -__all__ = ["Enterpreter", "opcode"] \ No newline at end of file diff --git a/src/interpreter/__init__.py b/src/interpreter/__init__.py new file mode 100644 index 0000000..533520a --- /dev/null +++ b/src/interpreter/__init__.py @@ -0,0 +1,3 @@ +from .__interpreter import Interpreter, opcode + +__all__ = ["Interpreter", "opcode"] \ No newline at end of file diff --git a/src/enterpreter/__enterpreter.py b/src/interpreter/__interpreter.py similarity index 94% rename from src/enterpreter/__enterpreter.py rename to src/interpreter/__interpreter.py index 728a3fb..299d1dd 100644 --- a/src/enterpreter/__enterpreter.py +++ b/src/interpreter/__interpreter.py @@ -20,8 +20,9 @@ def opcode(opcode: Operation): return _helper -class Enterpreter: - def __init__(self, bits=8, memsize=256) -> None: +class Interpreter: + def __init__(self, bits=8, memsize=None) -> None: + memsize = memsize or 2**bits self.__bits = bits self.__memory_max_size = 2**self.__bits self.__memory_size = min(memsize, self.__memory_max_size) diff --git a/src/enterpreter/__main__.py b/src/interpreter/__main__.py similarity index 100% rename from src/enterpreter/__main__.py rename to src/interpreter/__main__.py diff --git a/src/enterpreter/util/__init__.py b/src/interpreter/util/__init__.py similarity index 100% rename from src/enterpreter/util/__init__.py rename to src/interpreter/util/__init__.py diff --git a/src/enterpreter/util/hexdump.py b/src/interpreter/util/hexdump.py similarity index 100% rename from src/enterpreter/util/hexdump.py rename to src/interpreter/util/hexdump.py diff --git a/uv.lock b/uv.lock index ecc3dc1..b781627 100644 --- a/uv.lock +++ b/uv.lock @@ -51,7 +51,7 @@ wheels = [ ] [[package]] -name = "enterpreter" +name = "interpreter" version = "0.1.0" source = { editable = "." } dependencies = [