summaryrefslogtreecommitdiff
path: root/Shenanigans/src/org
diff options
context:
space:
mode:
authorGeonoTRON2000 <geono@thegt.org>2014-04-30 21:07:56 -0700
committerGeonoTRON2000 <geono@thegt.org>2014-04-30 21:07:56 -0700
commit508b66baa22aa54b940606663dd569eee03397ee (patch)
tree3d3e6309409751d6092aac68351f46569d121dad /Shenanigans/src/org
parenteb05c2dd956b7e991f52eb5c7f03a0f11b7f1f33 (diff)
downloadshenanigans-508b66baa22aa54b940606663dd569eee03397ee.tar.gz
Added functionality to run raw parser output.
Diffstat (limited to 'Shenanigans/src/org')
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/Shenanigans.java37
-rw-r--r--Shenanigans/src/org/archphantom/shenanigans/elements/Program.java4
2 files changed, 37 insertions, 4 deletions
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"
+ "# #"
+ "# <no arguments>: parse from standard input as Shenanigans code #"
+ "# -h or --HELP: display this help message #"
- + "# -f or --FILE <filename>: parse this file as Shenanigans code #"
+ + "# -f or --FILE <file>: parse this file as Shenanigans code #"
+ + "# -p or --PARSED <file>: load raw parser output into the interpreter #"
+ "# #"
+ "################################################################################";
public static void main (String[] args) {
try {
+ boolean useparsed = false;
boolean usefiles = false;
ArrayList<InputStream> streams = new ArrayList<InputStream>();
+ ArrayList<InputStream> pstreams = new ArrayList<InputStream>();
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<String, Namespace> namespaces;