Fix: rename enterpreter to interpreter

This commit is contained in:
2025-04-10 14:24:55 +01:00
parent 753f65384b
commit 17fd5f7acf
10 changed files with 59 additions and 17 deletions

View File

@@ -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"

View File

@@ -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)

View File

@@ -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()

View File

@@ -1,3 +0,0 @@
from .__enterpreter import Enterpreter, opcode
__all__ = ["Enterpreter", "opcode"]

View File

@@ -0,0 +1,3 @@
from .__interpreter import Interpreter, opcode
__all__ = ["Interpreter", "opcode"]

View File

@@ -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)

2
uv.lock generated
View File

@@ -51,7 +51,7 @@ wheels = [
]
[[package]]
name = "enterpreter"
name = "interpreter"
version = "0.1.0"
source = { editable = "." }
dependencies = [