From 7d73e5f3a8bb951d69724090461d7038957be2e4 Mon Sep 17 00:00:00 2001 From: GeonoTRON2000 Date: Sat, 3 May 2014 11:43:27 -0700 Subject: Added serializability and a class to export example programs. --- .../org/archphantom/shenanigans/Shenanigans.java | 2 + .../elements/expressions/Expression.java | 7 ++- .../shenanigans/elements/expressions/Variable.java | 1 + .../elements/expressions/comparators/BoolAnd.java | 1 + .../expressions/comparators/BoolEqual.java | 1 + .../expressions/comparators/BoolGreater.java | 1 + .../elements/expressions/comparators/BoolLess.java | 1 + .../elements/expressions/comparators/BoolNot.java | 1 + .../elements/expressions/comparators/BoolOr.java | 1 + .../elements/expressions/comparators/BoolXOr.java | 1 + .../elements/expressions/comparators/Count.java | 1 + .../elements/expressions/operations/Addition.java | 1 + .../elements/expressions/operations/BitAnd.java | 1 + .../elements/expressions/operations/BitOr.java | 1 + .../elements/expressions/operations/BitXOr.java | 1 + .../elements/expressions/operations/Division.java | 1 + .../elements/expressions/operations/Modulo.java | 1 + .../expressions/operations/Multiplication.java | 1 + .../elements/expressions/operations/ShiftLeft.java | 1 + .../expressions/operations/ShiftRight.java | 1 + .../expressions/operations/Subtraction.java | 1 + .../expressions/statements/ArrayAssignment.java | 1 + .../expressions/statements/ArrayVariable.java | 1 + .../expressions/statements/Assignment.java | 1 + .../statements/ConditionalStatement.java | 3 +- .../elements/expressions/statements/ForLoop.java | 1 + .../expressions/statements/FunctionCall.java | 1 + .../elements/expressions/statements/Group.java | 1 + .../elements/expressions/statements/If.java | 1 + .../elements/expressions/statements/IfElse.java | 1 + .../expressions/statements/NamespaceCall.java | 24 ++++++++++ .../elements/expressions/statements/Print.java | 1 + .../elements/expressions/statements/PrintLn.java | 42 ++++++++++++++++++ .../elements/expressions/statements/WhileLoop.java | 1 + .../shenanigans/elements/values/Array.java | 1 + .../shenanigans/elements/values/BoolValue.java | 1 + .../shenanigans/elements/values/CharValue.java | 1 + .../shenanigans/elements/values/DecimalValue.java | 1 + .../shenanigans/elements/values/Function.java | 1 + .../shenanigans/elements/values/IntValue.java | 3 +- .../shenanigans/elements/values/Namespace.java | 1 + .../shenanigans/elements/values/Value.java | 2 + .../shenanigans/elements/variables/VarTable.java | 4 +- .../archphantom/shenanigans/examples/AddIt.java | 11 ++--- .../archphantom/shenanigans/examples/CheckIt.java | 11 ++--- .../archphantom/shenanigans/examples/Exporter.java | 44 +++++++++++++++++++ .../shenanigans/examples/Factorial.java | 9 ++-- .../shenanigans/examples/FactorialZ.java | 9 ++-- .../shenanigans/examples/NamespaceAccess.java | 51 ++++++++++++++++++++++ .../archphantom/shenanigans/examples/ShiftIt.java | 9 ++-- 50 files changed, 242 insertions(+), 24 deletions(-) create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/NamespaceCall.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/PrintLn.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/examples/Exporter.java create mode 100644 Shenanigans/src/org/archphantom/shenanigans/examples/NamespaceAccess.java diff --git a/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java b/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java index a893ec2..c159053 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java +++ b/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java @@ -75,12 +75,14 @@ public class Shenanigans { } public static void parse (InputStream stream) throws IOException { + /* String data = ""; int b; while ((b = stream.read()) != -1) { data += (char) b; } // Interact with parser + */ } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Expression.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Expression.java index a4358ec..e3dbb30 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Expression.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Expression.java @@ -1,10 +1,13 @@ package org.archphantom.shenanigans.elements.expressions; +import java.io.Serializable; + import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; -public abstract class Expression { - +public abstract class Expression implements Serializable { + private static final long serialVersionUID = 3202650253846618491L; + public abstract Value evaluate(VarTable vars, Program program); } \ No newline at end of file diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java index 4251286..69648f2 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/Variable.java @@ -5,6 +5,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Variable extends Expression { + private static final long serialVersionUID = -8173453928428573742L; private String identifier; public Variable (String identifier) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolAnd.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolAnd.java index e5ed6c8..b77d939 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolAnd.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolAnd.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolAnd extends Expression { + private static final long serialVersionUID = -2352274778863145062L; private Expression a, b; public BoolAnd (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolEqual.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolEqual.java index 6bd55fc..afdb17a 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolEqual.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolEqual.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolEqual extends Expression { + private static final long serialVersionUID = 4474177294066408100L; private Expression a, b; public BoolEqual (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolGreater.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolGreater.java index 6794376..6c3eb11 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolGreater.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolGreater.java @@ -7,6 +7,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolGreater extends Expression { + private static final long serialVersionUID = 8061108525590149023L; private Expression a, b; public BoolGreater (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolLess.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolLess.java index a2191a5..bcd5dd9 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolLess.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolLess.java @@ -7,6 +7,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolLess extends Expression { + private static final long serialVersionUID = -3533910924781947837L; private Expression a, b; public BoolLess (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolNot.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolNot.java index 355b065..aa21fc7 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolNot.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolNot.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolNot extends Expression { + private static final long serialVersionUID = 8925098393357319876L; private BoolValue val; public BoolNot (BoolValue val) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolOr.java index 3f2463c..eee30df 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolOr.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolOr.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolOr extends Expression { + private static final long serialVersionUID = 2060667327993535961L; private Expression a, b; public BoolOr (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolXOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolXOr.java index f59fe5c..773a1da 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolXOr.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/BoolXOr.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolXOr extends Expression { + private static final long serialVersionUID = -4779123555276431149L; private Expression a, b; public BoolXOr (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/Count.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/Count.java index b7f86ac..090b1e4 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/Count.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/comparators/Count.java @@ -7,6 +7,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Count extends Expression { + private static final long serialVersionUID = -491231132081798904L; private Expression val; public Count (Expression val) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java index 3060883..1c4974f 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Addition extends Expression { + private static final long serialVersionUID = 386833200254543112L; private Expression a, b; public Addition (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java index e52571f..b10d6f8 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BitAnd extends Expression { + private static final long serialVersionUID = 628380389054082502L; private Expression a, b; public BitAnd (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java index 6ec203c..a882105 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BitOr extends Expression { + private static final long serialVersionUID = 8843369425724216070L; private Expression a, b; public BitOr (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java index d761b23..995d8be 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class BitXOr extends Expression { + private static final long serialVersionUID = 4251513045608664558L; private Expression a, b; public BitXOr (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java index 7c92bd9..a0b0c2c 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Division extends Expression { + private static final long serialVersionUID = 1824475991821919043L; private Expression a, b; public Division (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java index 641e7a4..c5a3af2 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Modulo extends Expression { + private static final long serialVersionUID = -2671899717634736876L; private Expression a, b; public Modulo (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java index 05d3287..e09eef1 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Multiplication extends Expression { + private static final long serialVersionUID = 3043564671424224124L; private Expression a, b; public Multiplication (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java index e544189..b1e7885 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class ShiftLeft extends Expression { + private static final long serialVersionUID = 1885480096964567811L; private Expression a, b; public ShiftLeft (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java index 688dc91..62a1dfa 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class ShiftRight extends Expression { + private static final long serialVersionUID = -2844155062825487257L; private Expression a, b; public ShiftRight (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java index 2d2d694..e093093 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Subtraction extends Expression { + private static final long serialVersionUID = 7561035138901827673L; private Expression a, b; public Subtraction (Expression a, Expression b) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java index 005685b..7d45e90 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayAssignment.java @@ -9,6 +9,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class ArrayAssignment extends Expression { + private static final long serialVersionUID = 5675142957845934390L; private String identifier; private Expression index; private Expression value; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java index 65c7438..37ff015 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ArrayVariable.java @@ -9,6 +9,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class ArrayVariable extends Expression { + private static final long serialVersionUID = 7616065946751354435L; private String identifier; private Expression index; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Assignment.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Assignment.java index 3536750..0976812 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Assignment.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Assignment.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Assignment extends Expression { + private static final long serialVersionUID = 7206490732056473577L; private String identifier; private Expression value; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ConditionalStatement.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ConditionalStatement.java index 9f8b1a2..c33f268 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ConditionalStatement.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ConditionalStatement.java @@ -7,7 +7,8 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public abstract class ConditionalStatement extends Expression { - + private static final long serialVersionUID = 6177224116883281628L; + boolean boolify (Expression expr, VarTable vars, Program program) { Value val = expr.evaluate(vars, program); if (val instanceof BoolValue) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ForLoop.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ForLoop.java index c18c630..ffe6b37 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ForLoop.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/ForLoop.java @@ -5,6 +5,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class ForLoop extends ConditionalStatement { + private static final long serialVersionUID = 4620309283857707757L; private Expression initializer; private Expression condition; private Expression iterator; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/FunctionCall.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/FunctionCall.java index 2fa2d5a..4be6184 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/FunctionCall.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/FunctionCall.java @@ -8,6 +8,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class FunctionCall extends Expression { + private static final long serialVersionUID = -5711425379993291311L; private String identifier; private ArrayList arguments; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Group.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Group.java index 8381b16..72d9ff0 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Group.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Group.java @@ -7,6 +7,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Group extends Expression { + private static final long serialVersionUID = -9092529908335757782L; private ArrayList items; public Group (ArrayList items) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/If.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/If.java index 2eca149..e152fcd 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/If.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/If.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class If extends ConditionalStatement { + private static final long serialVersionUID = -8033692342706309763L; private Expression condition; private Expression evaluate; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/IfElse.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/IfElse.java index 980ec19..c99edf9 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/IfElse.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/IfElse.java @@ -5,6 +5,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class IfElse extends ConditionalStatement { + private static final long serialVersionUID = 5036859013313773084L; private Expression condition; private Expression evalTrue; private Expression evalFalse; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/NamespaceCall.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/NamespaceCall.java new file mode 100644 index 0000000..f875fbc --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/NamespaceCall.java @@ -0,0 +1,24 @@ +package org.archphantom.shenanigans.elements.expressions.statements; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.Namespace; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class NamespaceCall extends Expression { + private static final long serialVersionUID = 660496406878146378L; + private String identifier; + + public NamespaceCall (String identifier) { + this.identifier = identifier; + } + + public Value evaluate (VarTable vars, Program program) { + Namespace ns = program.getNamespace(identifier.toLowerCase()); + if (ns == null) { + throw new RuntimeException("Not Implemented"); + } + return ns.getValue(program.getGlobalVars(), program); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java index a4c02ed..fae74a5 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/Print.java @@ -8,6 +8,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class Print extends Expression { + private static final long serialVersionUID = -6703606908464950567L; private Expression data; public Print (Expression data) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/PrintLn.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/PrintLn.java new file mode 100644 index 0000000..7901ddc --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/PrintLn.java @@ -0,0 +1,42 @@ +package org.archphantom.shenanigans.elements.expressions.statements; +import java.math.BigInteger; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.Array; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class PrintLn extends Expression { + private static final long serialVersionUID = 2521386078966318842L; + private Expression data; + + public PrintLn (Expression data) { + this.data = data; + } + + public Value evaluate(VarTable vars, Program program) { + Value vdata = data.evaluate(vars, program); + if (vdata instanceof Array) { + System.out.print('['); + Array arr = (Array) vdata; + for (int i = 0; i < arr.size(); i++) { + Value val = arr.getElement(new IntValue(BigInteger.valueOf(i)), vars, program).evaluate(vars, program); + if (val instanceof Array) { + new PrintLn ((Array) val).evaluate(vars, program); + } else { + System.out.print(val.getValue(vars, program).toString()); + } + if (i < arr.size()-1) { + System.out.print(", "); + } + } + System.out.print(']'); + } else { + System.out.print(vdata.getValue(vars, program).toString()); + } + System.out.print('\n'); + return vdata; + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/WhileLoop.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/WhileLoop.java index 956a7a4..9a8bb1e 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/WhileLoop.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/statements/WhileLoop.java @@ -5,6 +5,7 @@ import org.archphantom.shenanigans.elements.values.Value; import org.archphantom.shenanigans.elements.variables.VarTable; public class WhileLoop extends ConditionalStatement { + private static final long serialVersionUID = 2550160732857284210L; private Expression condition; private Expression evaluate; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java index 242e81a..792397f 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Array.java @@ -4,6 +4,7 @@ import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.variables.VarTable; public class Array extends Value { + private static final long serialVersionUID = -1094670284231123418L; private ArrayList vals; public Array () { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java index 23b968a..3ed0386 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/BoolValue.java @@ -3,6 +3,7 @@ import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.variables.VarTable; public class BoolValue extends Value { + private static final long serialVersionUID = 531596655233771451L; private boolean val; public BoolValue (boolean val) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java index fbae3c5..331dd76 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/CharValue.java @@ -3,6 +3,7 @@ import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.variables.VarTable; public class CharValue extends Value { + private static final long serialVersionUID = 6475887754647821042L; private char val; public CharValue (char val) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java index a2a2a58..e0c3039 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/DecimalValue.java @@ -5,6 +5,7 @@ import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.variables.VarTable; public class DecimalValue extends Value { + private static final long serialVersionUID = -5727395708519872329L; private BigDecimal val; public DecimalValue (double val) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java index 2ceb15e..8e6be54 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Function.java @@ -6,6 +6,7 @@ import org.archphantom.shenanigans.elements.expressions.Expression; import org.archphantom.shenanigans.elements.variables.VarTable; public class Function extends Value { + private static final long serialVersionUID = -6290598231971188194L; private ArrayList arguments; private Expression body; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java index a1969fe..ecbcf1b 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/IntValue.java @@ -6,7 +6,8 @@ import org.archphantom.shenanigans.elements.Program; import org.archphantom.shenanigans.elements.variables.VarTable; public class IntValue extends DecimalValue { - + private static final long serialVersionUID = 755770306873491835L; + public IntValue (int val) { super(new BigDecimal(val)); } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java index 6ada6e5..558cad2 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Namespace.java @@ -4,6 +4,7 @@ import org.archphantom.shenanigans.elements.expressions.Expression; import org.archphantom.shenanigans.elements.variables.VarTable; public class Namespace extends Value { + private static final long serialVersionUID = -4934489810223937971L; private String name; private Expression body; private VarTable myvars; diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java index d329c2c..1d7ca1e 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/values/Value.java @@ -4,6 +4,8 @@ import org.archphantom.shenanigans.elements.expressions.Expression; import org.archphantom.shenanigans.elements.variables.VarTable; public abstract class Value extends Expression { + private static final long serialVersionUID = 3704411592873487046L; + public abstract Object getValue(VarTable vars, Program program); public Value evaluate (VarTable vars, Program program) { diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java b/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java index 5328846..a06a562 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/variables/VarTable.java @@ -1,8 +1,10 @@ package org.archphantom.shenanigans.elements.variables; +import java.io.Serializable; import java.util.Hashtable; import org.archphantom.shenanigans.elements.values.Value; -public class VarTable { +public class VarTable implements Serializable { + private static final long serialVersionUID = 7310223054349729170L; private Hashtable vars; public VarTable () { diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/AddIt.java b/Shenanigans/src/org/archphantom/shenanigans/examples/AddIt.java index d898bd4..ec6b300 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/examples/AddIt.java +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/AddIt.java @@ -16,7 +16,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class AddIt { - public static void main (String[] args) { + public static Program buildExample () { ArrayList list = new ArrayList(); ArrayList argnames = new ArrayList(); argnames.add("x"); @@ -34,10 +34,11 @@ public class AddIt { Namespace main = new Namespace("main", group, new VarTable()); Hashtable namespaces = new Hashtable(); namespaces.put("main", main); - Program p = new Program(namespaces); - System.out.println("Running..."); - p.run(); - System.out.println("Ran..."); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/CheckIt.java b/Shenanigans/src/org/archphantom/shenanigans/examples/CheckIt.java index 8506584..f7c89d3 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/examples/CheckIt.java +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/CheckIt.java @@ -19,7 +19,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class CheckIt { - public static void main (String[] args) { + public static Program buildExample () { ArrayList list = new ArrayList(); ArrayList argnames = new ArrayList(); argnames.add("x"); @@ -35,10 +35,11 @@ public class CheckIt { Namespace main = new Namespace("main", group, new VarTable()); Hashtable namespaces = new Hashtable(); namespaces.put("main", main); - Program p = new Program(namespaces); - System.out.println("Running..."); - p.run(); - System.out.println("Ran..."); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/Exporter.java b/Shenanigans/src/org/archphantom/shenanigans/examples/Exporter.java new file mode 100644 index 0000000..25659de --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/Exporter.java @@ -0,0 +1,44 @@ +package org.archphantom.shenanigans.examples; +import java.io.FileOutputStream; +import java.io.ObjectOutputStream; +import java.util.Scanner; + +import org.archphantom.shenanigans.elements.Program; + +public class Exporter { + + public static void main (String[] args) { + Program addit = AddIt.buildExample(); + Program checkit = CheckIt.buildExample(); + Program factorial = Factorial.buildExample(); + Program factorialz = FactorialZ.buildExample(); + Program nsaccess = NamespaceAccess.buildExample(); + Program shiftit = ShiftIt.buildExample(); + Scanner s = new Scanner(System.in); + System.out.println("Export AddIt To:"); + writeToFile(addit, s.nextLine()); + System.out.println("Export CheckIt To:"); + writeToFile(checkit, s.nextLine()); + System.out.println("Export Factorial To:"); + writeToFile(factorial, s.nextLine()); + System.out.println("Export FactorialZ To:"); + writeToFile(factorialz, s.nextLine()); + System.out.println("Export NamespaceAccess To:"); + writeToFile(nsaccess, s.nextLine()); + System.out.println("Export ShiftIt To:"); + writeToFile(shiftit, s.nextLine()); + s.close(); + System.out.println("Export complete."); + } + + public static void writeToFile (Program program, String filename) { + try { + ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream(filename)); + stream.writeObject(program); + stream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/Factorial.java b/Shenanigans/src/org/archphantom/shenanigans/examples/Factorial.java index 06bf9b4..47053ba 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/examples/Factorial.java +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/Factorial.java @@ -19,7 +19,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class Factorial { - public static void main (String[] args) { + public static Program buildExample () { ArrayList list = new ArrayList(); ArrayList argnames = new ArrayList(); argnames.add("n"); @@ -37,8 +37,11 @@ public class Factorial { Namespace main = new Namespace("main", group, new VarTable()); Hashtable namespaces = new Hashtable(); namespaces.put("main", main); - Program p = new Program(namespaces); - p.run(); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/FactorialZ.java b/Shenanigans/src/org/archphantom/shenanigans/examples/FactorialZ.java index f6ae70a..889d68f 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/examples/FactorialZ.java +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/FactorialZ.java @@ -19,7 +19,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class FactorialZ { - public static void main (String[] args) { + public static Program buildExample () { ArrayList list = new ArrayList(); ArrayList argnames = new ArrayList(); argnames.add("n"); @@ -40,8 +40,11 @@ public class FactorialZ { Namespace main = new Namespace("main", group, new VarTable()); Hashtable namespaces = new Hashtable(); namespaces.put("main", main); - Program p = new Program(namespaces); - p.run(); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/NamespaceAccess.java b/Shenanigans/src/org/archphantom/shenanigans/examples/NamespaceAccess.java new file mode 100644 index 0000000..208d958 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/NamespaceAccess.java @@ -0,0 +1,51 @@ +package org.archphantom.shenanigans.examples; +import java.util.ArrayList; +import java.util.Hashtable; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.expressions.Variable; +import org.archphantom.shenanigans.elements.expressions.operations.Addition; +import org.archphantom.shenanigans.elements.expressions.statements.Assignment; +import org.archphantom.shenanigans.elements.expressions.statements.FunctionCall; +import org.archphantom.shenanigans.elements.expressions.statements.Group; +import org.archphantom.shenanigans.elements.expressions.statements.NamespaceCall; +import org.archphantom.shenanigans.elements.expressions.statements.PrintLn; +import org.archphantom.shenanigans.elements.values.Function; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Namespace; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class NamespaceAccess { + + public static Program buildExample () { + ArrayList foo_body = new ArrayList(); + Namespace foo = new Namespace("foo", new Group(foo_body), new VarTable()); + foo_body.add(new Assignment("x", new IntValue("0"))); + ArrayList argNames1 = new ArrayList(1); + argNames1.add("y"); + foo_body.add(new Assignment("set", new Function(argNames1, new Assignment("foo.x", new Variable("y"))))); + ArrayList argNames2 = new ArrayList(2); + argNames2.add("n"); + foo_body.add(new Assignment("inc", new Function(argNames2, new Assignment("foo.x", new Addition(new Variable("foo.x"), new Variable("n")))))); + foo_body.add(new Assignment("show", new Function(new ArrayList(0), new PrintLn(new Variable("foo.x"))))); + ArrayList main_body = new ArrayList(); + main_body.add(new NamespaceCall("foo")); + ArrayList arguments1 = new ArrayList(1); + arguments1.add(new IntValue("0")); + main_body.add(new FunctionCall("foo.set", arguments1)); + ArrayList arguments2 = new ArrayList(1); + arguments2.add(new IntValue("4")); + main_body.add(new FunctionCall("foo.inc", arguments2)); + main_body.add(new FunctionCall("foo.show", new ArrayList())); + Namespace main = new Namespace("main", new Group(main_body), new VarTable()); + Hashtable namespaces = new Hashtable(2); + namespaces.put("foo", foo); + namespaces.put("main", main); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/examples/ShiftIt.java b/Shenanigans/src/org/archphantom/shenanigans/examples/ShiftIt.java index 1d56397..783dd9f 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/examples/ShiftIt.java +++ b/Shenanigans/src/org/archphantom/shenanigans/examples/ShiftIt.java @@ -25,7 +25,7 @@ import org.archphantom.shenanigans.elements.variables.VarTable; public class ShiftIt { - public static void main (String[] args) { + public static Program buildExample () { ArrayList list = new ArrayList(); ArrayList argnames = new ArrayList(); argnames.add("a"); @@ -52,8 +52,11 @@ public class ShiftIt { Namespace main = new Namespace("main", group, new VarTable()); Hashtable namespaces = new Hashtable(); namespaces.put("main", main); - Program p = new Program(namespaces); - p.run(); + return new Program(namespaces); + } + + public static void main (String[] args) { + buildExample().run(); } } -- cgit v1.2.3