EDIT; I solved it, the reason it wasn't working was that it was in StarterGui, and I didn't spawn a player, I'm an idiot. it's still pretty broken though, so if you want to help me iron out some of the problems, I'd appreciate it.
I've been working on a simple compiler, but it just won't do anything, what's wrong with it? the value of input is '5+7/2-1' none of the print functions are called, and the script isn't disabled.
The OS Modulescript it imports from;
function Write(s) -- Writes a string
if s ~= nil then
print(s)
else
print("")
end
end
function WriteLn(s) -- Writes a string to a new line
if s ~= nil then
print(s)
else
print("")
end
end
function Halt() -- Halts the program
print("HALT")
end
function In(x,t) -- checks to see if an item is in a table
for i = 1,#t do
if t[i] == x then
return true
end
end
return false
end
Alphas = -- All Letters
{'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z'}
Digits = -- All Digits
{'1','2','3','4','5','6','7','8','9','0'}
D = {nil,nil,nil,nil,nil,nil,nil,nil}
S = {}
return {Write,WriteLn,Halt,In,Alphas,Digits,'ready',D,S}
The Broken Script
print("start")
DEBUG = true -- set to false to disable debug printing
input = script.Parent.Parent.input -- fake input
print("1")
-- Necessary Functions
OS = require(script.Parent.OS)
print(OS[7])
D = OS[8]
SP = OS[9]
print('2')
Write = OS[1]
WriteLn = OS[2]
Halt = OS[3]
In = OS[4]
rd = 0
function Read()
rd = rd + 1
local re = string.sub(input.Value,rd,rd+1)
PrintD(re)
return re
end
function SP_push(x)
PrintD(x)
table.insert(SP, x)
end
function SP_pop()
local rt = SP[-1]
PrintD(rt)
table.remove(SP)
return rt
end
-- Debug Function
function PrintD(s)
if DEBUG == true then
if s ~= nil then
WriteLn("DEBUG; "..s)
else
WriteLn("DEBUG MODE")
end
end
end
-- Necessary Tables
Alphas = OS[5]
Digits = OS[6]
-- Compiler
local TAB = " " -- Tab
local Look = "" -- lookup a char
local function GetChar() -- get Look
Look = Read()
end
local function Error(s) -- Write an error
warn("Error: "..s..".")
end
local function Abort(s) -- Abort the program
Error(s)
Halt()
end
local function Expected(s) -- Write a "Char Expected" Error
Abort(s.. " Expected")
end
local function Match(x) -- Match Characters
if Look == x then GetChar() else
Expected('"'..x..'"')
end
end
local function IsAlpha(c) -- Check if a character is an Alpha Letter
return In(string.upper(c),Alphas)
end
local function IsDigit(c) -- Check if a character is a Digit
return In(c,Digits)
end
local function GetName() -- Get a Name
if not IsAlpha(Look) then Expected('Name') end
PrintD(string.upper(Look))
return string.upper(Look)
end
local function GetNum() -- Get a Number
if not IsDigit(Look) then Expected('Integer') end
PrintD(Look)
return Look
end
local function Emit(s) -- Print a String
Write(TAB..s)
end
local function EmitLn(s) -- Print a String on a new line
Emit(s)
WriteLn()
end
--local function Term() -- Term
-- --Look = '7'
-- D[1] = GetNum()
--end
local function Factor()
D[1] = GetNum()
end
local function Multiply()
Match('*')
Factor()
EmitLn(SP_pop() * D[1])
end
local function Divide()
Match('/')
Factor()
D[2] = SP_pop
EmitLn(D[2]/D[1])
end
local function Term()
Factor()
while Look == '*' or Look == '?' do
SP_push(D[1]) D[1] = nil
if Look == '*' then
Multiply()
elseif Look == '/' then
Divide()
else Expected("Mulop") end
end
end
local function Add() -- add
Match('+')
Term()
EmitLn(SP_pop() + D[1])
end
local function Subtract() -- subtract
Match('-')
Term()
EmitLn(SP_pop()-D[1])
end
local function Expression() -- Expressions
Term()
while Look == '+' or Look == '-' do
SP_push(D[1]) D[1] = nil
if Look == '+' then
Add()
elseif Look == '-' then
Subtract()
else Expected("Addop") end
end
end
local function Init() -- Initiate
GetChar()
end
local function begin() -- Start Function
WriteLn("ZerOS")
PrintD()
Init()
Expression()
end
begin() -- Run

1 comment
On line 129, there's was a '?' instead of a forward slash. that's fixed, still not working, so it wasn't the problem.