This commit is contained in:
2026-08-14 20:45:12 -04:00
parent 61975a24fb
commit 69d8c9434b
23 changed files with 163 additions and 5 deletions
+2
View File
@@ -0,0 +1,2 @@
Hyperion
Astronand
+4
View File
@@ -0,0 +1,4 @@
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.
<<+++++++++++++++.>.+++.
------.--------.>+.>.
+82
View File
@@ -0,0 +1,82 @@
local function bf(...)
local file = ...
local fs = require("fs")
local script = fs.readAllText(file)
local program = {}
print("[Brainfuck] Loaded script")
--pre parse script
for c in script:gmatch(".") do
if c:match("[%+%-%<%>%[%]%,%.]") then
table.insert(program, c)
end
end
print("[Brainfuck] Script parsed")
local jumps = {}
local stack = {}
for i, c in ipairs(program) do
if c == "[" then
table.insert(stack, i)
elseif c == "]" then
assert(#stack > 0, "Unmatched ]")
local start = table.remove(stack)
jumps[start] = i
jumps[i] = start
end
end
print("[Brainfuck] Jumptable made")
print("[Brainfuck] Initailizing...")
local startime = syscall.getUptime()
assert(#stack == 0, "Unmatched [")
local tape = {0}
local ptr = 1
local ip = 1
local itrs = 0
while ip <= #program do
local char = program[ip]
if char == ">" then
ptr=ptr+1
elseif char == "<" then
ptr=ptr-1
if ptr<=0 then
print("[Brainfuck] FATAL ERROR: OOB ERR")
syscall.exit()
end
elseif char == "+" then
local cur=tape[ptr] or 0
tape[ptr]=(cur+1)%256
elseif char == "-" then
local cur=tape[ptr] or 0
tape[ptr]=(cur-1)%256
elseif char == "." then
printInline(string.char(tape[ptr] or 0))
elseif char == "," then
local data = syscall.read(0, 1)
if not data or data == "" then data = "\0" end
tape[ptr]=data:byte()
elseif char == "[" then
if (tape[ptr] or 0)==0 then
ip=jumps[ip]
end
elseif char == "]" then
if (tape[ptr] or 0)~=0 then
ip=jumps[ip]
end
end
ip=ip+1
itrs=itrs+1
end
print("[Brainfuck] Ran in "..tostring(itrs).." itrations")
print("[Brainfuck] and "..tostring(syscall.getUptime()-startime))
syscall.exit()
end
local ok,err = xpcall(bf, debug.traceback, ...)
if not ok then
print("[Brainfuck] FATAL ERROR: "..err)
end
+1
View File
@@ -0,0 +1 @@
Brainfuck interpreter
+1
View File
@@ -0,0 +1 @@
1.0.0