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