From eb05c2dd956b7e991f52eb5c7f03a0f11b7f1f33 Mon Sep 17 00:00:00 2001 From: GeonoTRON2000 Date: Tue, 29 Apr 2014 07:13:20 -0700 Subject: Pushed existing work --- .../shenanigans/elements/values/Array.java | 37 ++++++++++++ .../shenanigans/elements/values/BoolValue.java | 16 ++++++ .../shenanigans/elements/values/CharValue.java | 15 +++++ .../shenanigans/elements/values/DecimalValue.java | 26 +++++++++ .../shenanigans/elements/values/Function.java | 25 ++++++++ .../shenanigans/elements/values/IntValue.java | 26 +++++++++ .../shenanigans/elements/values/Namespace.java | 66 ++++++++++++++++++++++ .../shenanigans/elements/values/Value.java | 13 +++++ 8 files changed, 224 insertions(+) create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements/values') diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java new file mode 100644 index 0000000..c03b66f --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java @@ -0,0 +1,37 @@ +package org.archphantom.shenanigans.elements.values; +import java.util.ArrayList; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Array extends Value { + private ArrayList vals; + + public Array (ArrayList values) { + this.vals = values; + } + + public Array (String string) { + this.vals = new ArrayList(string.length()); + for (int i = 0; i < string.length(); i++) { + this.vals.add(new CharValue(string.charAt(i))); + } + } + + public Expression getElement (IntValue index, VarTable vars, Program program) { + return vals.get(index.intValue(vars, program).intValue()); + } + + public Expression setElement (IntValue index, Expression value, VarTable vars, Program program) { + return vals.set(index.intValue(vars, program).intValue(), value); + } + + public int size () { + return vals.size(); + } + + public ArrayList getValue(VarTable vars, Program program) { + return vals; + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java new file mode 100644 index 0000000..23b968a --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java @@ -0,0 +1,16 @@ +package org.archphantom.shenanigans.elements.values; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class BoolValue extends Value { + private boolean val; + + public BoolValue (boolean val) { + this.val = val; + } + + public Boolean getValue (VarTable vars, Program program) { + return val; + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java new file mode 100644 index 0000000..fbae3c5 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java @@ -0,0 +1,15 @@ +package org.archphantom.shenanigans.elements.values; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class CharValue extends Value { + private char val; + + public CharValue (char val) { + this.val = val; + } + + public Character getValue (VarTable vars, Program program) { + return val; + } +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java new file mode 100644 index 0000000..a2a2a58 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java @@ -0,0 +1,26 @@ +package org.archphantom.shenanigans.elements.values; +import java.math.BigDecimal; + +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class DecimalValue extends Value { + private BigDecimal val; + + public DecimalValue (double val) { + this.val = new BigDecimal(val); + } + + public DecimalValue (String val) { + this.val = new BigDecimal(val); + } + + public DecimalValue (BigDecimal val) { + this.val = val; + } + + public BigDecimal getValue (VarTable vars, Program program) { + return val; + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java new file mode 100644 index 0000000..2ceb15e --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.values; +import java.util.ArrayList; + +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Function extends Value { + private ArrayList arguments; + private Expression body; + + public Function (ArrayList arguments, Expression body) { + this.arguments = arguments; + this.body = body; + } + + public ArrayList getArgNames () { + return arguments; + } + + public Value getValue (VarTable vars, Program program) { + return body.evaluate(vars, program); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java new file mode 100644 index 0000000..a1969fe --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java @@ -0,0 +1,26 @@ +package org.archphantom.shenanigans.elements.values; +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class IntValue extends DecimalValue { + + public IntValue (int val) { + super(new BigDecimal(val)); + } + + public IntValue (String val) { + super(new BigDecimal(val)); + } + + public IntValue(BigInteger val) { + super(new BigDecimal(val)); + } + + public BigInteger intValue (VarTable vars, Program program) { + return super.getValue(vars, program).toBigInteger(); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java new file mode 100644 index 0000000..5b33bf2 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java @@ -0,0 +1,66 @@ +package org.archphantom.shenanigans.elements.values; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Namespace extends Value { + private String name; + private Expression body; + private VarTable myvars; + + public Namespace (String name, Expression body, VarTable myvars) { + this.name = name; + this.body = body; + this.myvars = myvars; + } + + public String getName () { + return name; + } + + public Expression getVar (String identifier, VarTable vars, Program program) { + if (identifier.contains(".")) { + String nspacecall = identifier.substring(0, identifier.indexOf('.')); + String varname = identifier.substring(identifier.indexOf('.')+1); + Value vns; + if ((vns = myvars.get(nspacecall).evaluate(vars, program)) != null) { + if (vns instanceof Namespace) { + Namespace ns = (Namespace) vns; + return ns.getVar(varname, vars, program); + } else { + return null; + } + } else { + return null; + } + } else { + return myvars.get(identifier); + } + } + + public Value setVar (String identifier, Expression value, VarTable vars, Program program) { + if (identifier.contains(".")) { + String nspacecall = identifier.substring(0, identifier.indexOf('.')); + String varname = identifier.substring(identifier.indexOf('.')+1); + Value vns; + if ((vns = myvars.get(nspacecall).evaluate(vars, program)) != null) { + if (vns instanceof Namespace) { + Namespace ns = (Namespace) vns; + return ns.setVar(varname, value, vars, program); + } else { + return null; + } + } else { + return null; + } + } else { + return vars.get(identifier).evaluate(vars, program); + } + } + + public Value getValue (VarTable vars, Program program) { + System.out.println("Running namespace's body..."); + return body.evaluate(myvars, program); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java new file mode 100644 index 0000000..d329c2c --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java @@ -0,0 +1,13 @@ +package org.archphantom.shenanigans.elements.values; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public abstract class Value extends Expression { + public abstract Object getValue(VarTable vars, Program program); + + public Value evaluate (VarTable vars, Program program) { + return this; + } + +} -- cgit v1.2.3