diff interps/glypho/Glypho.java @ 996:859f9b4339e6

<Gregor> tar xf egobot.tar.xz
author HackBot
date Sun, 09 Dec 2012 19:30:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/interps/glypho/Glypho.java	Sun Dec 09 19:30:08 2012 +0000
@@ -0,0 +1,122 @@
+/*
+
+Interpreter for the Glypho language
+
+Rune Berge 2005
+http://rune.krokodille.com/lang
+
+Glypho specification:
+http://www4.ncsu.edu/~bcthomp2/glypho.txt
+
+This software is Public Domain.
+
+*/
+
+
+import java.io.*;
+
+public class Glypho {
+
+  public static void displayError(String msg) {
+    System.err.println(msg);
+    System.exit(1);
+  }
+
+  public static void main(String[] args) {
+    StringBuffer source = new StringBuffer();
+    InputStream in = System.in;
+    OutputStream out = System.out;
+    OutputStream err = System.err;
+
+    if (args.length==0) displayUsage();
+
+    for (int i = 0; i < args.length; i++) {
+      if (args[i].charAt(0) == '-') {
+        switch (args[i].charAt(1)) {
+          case 'i': if ((i++) < (args.length - 1))
+                      try {
+                        in = new FileInputStream(args[i]);
+                      }catch (FileNotFoundException e) { displayError("File not found: " + args[i]); }
+                    else displayError("Missing input filename");
+                    break;
+          case 'o': if ((i++) < (args.length - 1))
+                      try {
+                        out = new FileOutputStream(args[i]);
+                      }catch (FileNotFoundException e) { displayError("Unable to write to " + args[i]); }
+                    else displayError("Missing output filename");
+                    break;
+          case 'e': if ((i++) < (args.length - 1))
+                      try {
+                        err = new FileOutputStream(args[i]);
+                      }catch (FileNotFoundException e) { displayError("Unable to write to " + args[i]); }
+                    else displayError("Missing error filename");
+                    break;
+          case 'h': displayUsage();
+                    break;
+          default:  displayError("Invalid argument: " + args[i]);
+
+        }
+
+      }
+    }
+
+    if (args.length <= 0) displayError("Error: No source file specified!");
+
+    if (args.length >= 1) {
+      String sourceFile = args[args.length-1];
+
+      try {
+        FileInputStream src = new FileInputStream(sourceFile);
+        int b=-1;
+
+        b = src.read();
+        while (b>=0)  {
+          source.append((char)b);
+          b = src.read();
+        }
+
+      } catch (FileNotFoundException e) { displayError("File not found: " + args[args.length-1]); }
+      catch (IOException e) { displayError(e.toString());}
+
+
+      boolean shorthand = false;
+      if (sourceFile.substring(sourceFile.length() - 4).equals(".gsh")) shorthand = true;
+
+      new Glypho(source.toString(), shorthand, in, out, err);
+
+    }
+
+  }//main()
+
+  public static void displayUsage() {
+    System.out.println("Glypho Interpreter version " + GlyphoInterpreter.VERSION);
+    System.out.println("Rune Berge - 2005 - http://rune.krokodille.com/lang");
+    System.out.println("Glypho specification: http://www4.ncsu.edu/~bcthomp2/glypho.txt");
+    System.out.println("");
+    System.out.println("This is software is Public Domain");
+    System.out.println("");
+    System.out.println("Usage: Glypho [OPTIONS] [filename]");
+    System.out.println("");
+    System.out.println("If the filename ends with .gsh it will be interpreted as Glypho shorthand.");
+    System.out.println("Otherwise it will be interpreted as regular Glypho.");
+    System.out.println("");
+    System.out.println("Options:");
+    System.out.println("  -i <filename>   Read input from this file (default is standard input)");
+    System.out.println("  -o <filename>   Write output to this file (default is standard output)");
+    System.out.println("  -e <filename>   Write error messages to this file (default is standard output)");
+    System.out.println("  -h              Display this information");
+    System.out.println("");
+    System.out.println("");
+    System.out.println("Please report any bugs to rune@krokodille.com");
+
+
+    System.exit(0);
+  }
+
+  public Glypho(String source, boolean shorthand, InputStream in, OutputStream out, OutputStream err) {
+
+    GlyphoInterpreter GI = new GlyphoInterpreter(in, out, err);
+    GI.interpret(source, shorthand);
+  }
+
+}
\ No newline at end of file