From 508b66baa22aa54b940606663dd569eee03397ee Mon Sep 17 00:00:00 2001 From: GeonoTRON2000 Date: Wed, 30 Apr 2014 21:07:56 -0700 Subject: Added functionality to run raw parser output. --- .../org/archphantom/shenanigans/Shenanigans.java | 37 ++++++++++++++++++++-- .../archphantom/shenanigans/elements/Program.java | 4 ++- 2 files changed, 37 insertions(+), 4 deletions(-) (limited to 'Shenanigans/src/org/archphantom/shenanigans') diff --git a/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java b/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java index c516de0..a893ec2 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java +++ b/Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java @@ -2,34 +2,65 @@ package org.archphantom.shenanigans; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.ObjectInputStream; import java.util.ArrayList; +import org.archphantom.shenanigans.elements.Program; public class Shenanigans { private static final String HELP_STRING = "############################### Shenanigans Help ###############################\r\n" + "# #" + "# : parse from standard input as Shenanigans code #" + "# -h or --HELP: display this help message #" - + "# -f or --FILE : parse this file as Shenanigans code #" + + "# -f or --FILE : parse this file as Shenanigans code #" + + "# -p or --PARSED : load raw parser output into the interpreter #" + "# #" + "################################################################################"; public static void main (String[] args) { try { + boolean useparsed = false; boolean usefiles = false; ArrayList streams = new ArrayList(); + ArrayList pstreams = new ArrayList(); for (int i = 0; i < args.length; i++) { if (args[i].equals("-h") || args[i].equalsIgnoreCase("--help")) { System.out.println(HELP_STRING); return; } + if ((args[i].equals("-p") || args[i].equalsIgnoreCase("--PARSED")) && (i+1) < args.length) { + pstreams.add(new FileInputStream(args[i+1])); + useparsed = true; + } + if ((args[i].equals("-f") || args[i].equalsIgnoreCase("--file")) && (i+1) < args.length) { + streams.add(new FileInputStream(args[i+1])); + usefiles = true; + } if ((args[i].equals("-f") || args[i].equalsIgnoreCase("--file")) && (i+1) < args.length) { streams.add(new FileInputStream(args[i+1])); usefiles = true; } } + if (useparsed) { + for (int i = 0; i < pstreams.size(); i++) { + try { + ObjectInputStream oistream = new ObjectInputStream(pstreams.get(i)); + Object oread = oistream.readObject(); + if (oread instanceof Program) { + Program p = (Program) oread; + p.run(); + } else { + System.err.println("Object is not valid parser output."); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + } if (usefiles) { parse(streams.toArray(new InputStream[] {})); - } else { + } + if (!useparsed && !usefiles) { parse(System.in); } } catch (IOException e) { @@ -49,7 +80,7 @@ public class Shenanigans { while ((b = stream.read()) != -1) { data += (char) b; } - //ShenaniganParser.parse(data); + // Interact with parser } } diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/Program.java b/Shenanigans/src/org/archphantom/shenanigans/elements/Program.java index 665cc9a..51fca62 100644 --- a/Shenanigans/src/org/archphantom/shenanigans/elements/Program.java +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/Program.java @@ -1,9 +1,11 @@ package org.archphantom.shenanigans.elements; +import java.io.Serializable; import java.util.Hashtable; import org.archphantom.shenanigans.elements.values.Namespace; import org.archphantom.shenanigans.elements.variables.VarTable; -public class Program implements Runnable { +public class Program implements Runnable, Serializable { + private static final long serialVersionUID = 4309390632410676282L; private VarTable globalVars; private Hashtable namespaces; -- cgit v1.2.3