Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

What does this script do?

Asked by
ZeroBits 142
8 years ago

I've happened upon one of my old projects, and was wondering if you guys could help me figure out what it should be doing, what it's doing now, and why it's doing it, here's the info I've gathered.

This is the Heiarchy;

main input -- stringValue, value is 5+1/7-3 ZeroScript -- Folder cradle -- the main Script, enabled, 181 lines cradle.BKP -- Emptier version of above, disabled, 78 lines OS -- ModuleScript

OS has the following functions; Write(s) -- Prints a string WriteLn(s) -- Exactly the same as above Halt() -- Prints "Halt" In(x,t) -- checks if item x is in table t OS has the following tables; Alphas -- All capital letters Digits -- 1-0 D -- {nil,nil,nil,nil,nil,nil,nil,nil} S -- empty table the module returns Write, WriteLn, Halt, In, Alphas, Digits, 'ready', D, S in that order This is the Output; start 1 ready 2 ZerOS DEBUG MODE DEBUG; 5 DEBUG; 5

This is the 'cradle' 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)
    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

this is the cradle.BKP script

-- Necessary Functions

OS = require(script.Parent.OS)

Write = OS[1]
WriteLn = OS[2]
Halt = OS[3]
In = OS[4]
-- Necessary Tables
Alphas = OS[5]
Digits = OS[6]


-- Compiler
local TAB = "   " -- Tab
local Look = "r" -- lookup a char

local function GetChar() -- get Look
    return Look
end

local function Error(s) -- Write an error
    WriteLn("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
    return string.upper(Look)
end

local function GetNum() -- Get a Number
    if not IsDigit(Look) then Expected('Integer') end
    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 Init()
    GetChar()
end

local function begin()
    Init()
    WriteLn("ZerOS")
end

begin()

I think it's supposed to read the input, and output something, but I'm not entirely sure what I was trying to do.

Answer this question