--[[ Expression Language 1 Partial Test H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi Developed for CSci 450, Org. of Programming Languages, Fall 2016 1234567890123456789012345678901234567890123456789012345678901234567890 2016-09-13: Separated from monolithic program for Assignment #1 2016-09-21: Removed Min, Max, Set, Let for new base aftr HW1 --]] -- Set module "parameters" UTILITIES = "utilities" ENVIRONMENT = "environment" ABS_SYNTAX = "abs_syn_01" EVALUATOR = "evaluator_01" VALUES = "values_01" -- Import Utilities module local util = require(UTILITIES) local treeConcat, printTree, show_data = util.treeConcat, util.printTree, util.show_data -- Import Abstract Syntax module local absyn = require(ABS_SYNTAX) -- reduced abs_syn_01 local exprToString = absyn.exprToString local getArg = absyn.getArg local Int, isInt = absyn.Int, absyn.isInt local Var, isVar = absyn.Var, absyn.isVar local Neg, isNeg = absyn.Neg, absyn.isNeg local Add, isAdd = absyn.Add, absyn.isAdd local Sub, isSub = absyn.Sub, absyn.isSub local Mul, isMul = absyn.Mul, absyn.isMul local Div, isDiv = absyn.Div, absyn.isDiv local Eq, isEq = absyn.Eq, absyn.isEq local Ne, isNe = absyn.Ne, absyn.isNe local Lt, isLt = absyn.Lt, absyn.isLt local Gt, isGt = absyn.Gt, absyn.isGt local Le, isLe = absyn.Le, absyn.isLe local Ge, isGe = absyn.Ge, absyn.isGe local If, isIf = absyn.If, absyn.isIf local Nop, isNop = absyn.Nop, absyn.isNop -- Import Values module local values = require(VALUES) local FALSEVAL, TRUEVAL = values.FALSEVAL, values.TRUEVAL local isFalse, isTrue = values.isFalse, values.isTrue local asBoolVal = values.asBoolVal -- Import Environment module local environ = require(ENVIRONMENT) local newEnv = environ.newEnv local findBinding = environ.findBinding local assign = environ.assign local setVal = environ.setVal local getVal = environ.getVal local dumpEnv = environ.dumpEnv -- Import Evaluator module local evaluator = require(EVALUATOR) -- reduced evaluator_01 local eval = evaluator.eval --[[ TEST SCRIPT Testing is quite incomplete! Expand! --]] print("\nSTART") print("Testing is quite incomplete! Expand!\n") local env = newEnv() setVal("x",1,env) setVal("y",2,env) setVal("z",3,env) dumpEnv(env) print("\nTry getVals") local x, y, z = getVal("x", env), getVal("y", env), getVal("z", env) print("x, y, z = " .. x .. ", " .. y .. ", " .. z) print("\nTry Int") local two = Int(2) print("two = Int(2) : " .. exprToString(two)) local three = Int(3) print("three = Int(3) : " .. exprToString(three)) print("eval(Int(2), env)) = " .. tostring(eval(two, env))) print("eval(Int(3), env)) = " .. tostring(eval(three, env))) print("\nTry Var") local vx = Var("x") print("vx = Var(x) : " .. exprToString(vx)) print("eval(vx, env) = " .. tostring(eval(vx, env))) local vy = Var("y") print("vy = Var(y) : " .. exprToString(vy)) print("eval(vy, env) = " .. tostring(eval(vy, env))) print("\nTry Neg") local en = Neg(three) print("en = Neg(Int(3)) : " .. exprToString(en)) print("eval(en, env)) = " .. tostring(eval(en, env))) print("\nTry Mul") local em = Mul(two, vx) print("em = Mul(Int(2), Var(x)) : " .. exprToString(em)) print("eval(em, env)) = " .. tostring(eval(em, env))) print("\nTry Add") local ea = Add(three, em) print("ea = Add(Int(3),Mul(Int(2),Var(x))) : " .. exprToString(ea)) print("eval(ea, env)) = " .. tostring(eval(ea, env))) print("\nTry Sub") local esub = Sub(three, en) print("esub = Sub(three, en) : " .. exprToString(esub)) print("eval(esub, env)) = " .. tostring(eval(esub, env))) print("\nTry Div") local ediv = Div(three, three) print("ediv = Div(three, three) : " .. exprToString(ediv)) print("eval(ediv, env)) = " .. tostring(eval(ediv, env))) local ediv2 = Div(three, two) print("edivs = Div(three, two) : " .. exprToString(ediv2)) print("eval(ediv2, env)) = " .. tostring(eval(ediv2, env))) print("\nTry Eq") local ceq = Eq(three,three) print("ceq = Eq(Int(3),Int(3)) : " .. exprToString(ceq)) print("eval(ceq, env) : " .. tostring(eval(ceq))) ceq = Eq(two,three) print("ceq = Eq(Int(2),Int(3)) : " .. exprToString(ceq)) print("eval(ceq, env) = " .. tostring(eval(ceq))) print("\nTry Lt") local clt = Lt(three,three) print("clt = Lt(Int(3),Int(3)) : " .. exprToString(clt)) print("eval(clt, env) = " .. tostring(eval(clt))) clt = Lt(two,three) print("clt = Lt(Int(2),Int(3)) : " .. exprToString(clt)) print("eval(clt, env) = " .. tostring(eval(clt))) print("\nTry If") local eif = If(Lt(two,three), Var("x"), Var("y") ) print('eif = If(Lt(two,three), Var("x"), Var("y")) ' .. exprToString(eif)) print("eval(eif,env) = " .. tostring(eval(eif,env))) eif = If(Lt(three,two), Var("x"), Var("y") ) print('eif = If(Lt(three,two), Var("x"), Var("y")) ' .. exprToString(eif)) print("eval(eif,env) = " .. tostring(eval(eif,env))) print("\nEND")