+++ /dev/null
-// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
-
-package edu.berkeley.sbp.misc;
-
-import edu.berkeley.sbp.*;
-import edu.berkeley.sbp.misc.*;
-import edu.berkeley.sbp.meta.*;
-import edu.berkeley.sbp.chr.*;
-import edu.berkeley.sbp.tib.*;
-import java.io.*;
-
-public class HaskellHelper {
- public static void main(String[] argv) throws Throwable { help(argv[0], argv[1]); }
- public static boolean isNull(Object o) { return o==null; }
- public static Tree help(String grammarFile, String targetFile) throws Throwable {
- try {
- Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(grammarFile)).expand1();
- Union meta = GrammarBuilder.buildFromAST(res, "s", new File[0]);
- Input input = new Tib(new FileInputStream(targetFile));
- Tree ret = new CharParser(meta).parse(input).expand1();
- if (ret==null) throw new NullPointerException("CharParser returned null");
- return ret;
- } catch (Throwable e) {
- e.printStackTrace();
- throw e;
- }
- }
-}
+++ /dev/null
-// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
-
-package edu.berkeley.sbp.tib;
-import edu.berkeley.sbp.*;
-import edu.berkeley.sbp.misc.*;
-import edu.berkeley.sbp.chr.*;
-import java.util.*;
-import java.io.*;
-
-/**
- * A slow, ugly, inefficient, inelegant, ad-hoc parser for TIB files.
- *
- * Despite being inelegant, this parser keeps all internal state on
- * the stack (the only heap objects created are those which are
- * returned).
- *
- * This was written as an ad-hoc parser to facilitate
- * experimentation with the TIB spec. Once the spec is finalized it
- * should probably be rewritten.
- */
-public class Tib implements Input<Character> {
-
- public String showRegion(Region<Character> r, int max) { return ""; }
-
- public Tib(String s) throws IOException { this(new StringReader(s)); }
- public Tib(Reader r) throws IOException { this(new BufferedReader(r)); }
- public Tib(InputStream is) throws IOException { this(new BufferedReader(new InputStreamReader(is))); }
- public Tib(BufferedReader br) throws IOException {
- this.br = br;
- istack.add(-1);
- }
- public String getName() { return null; }
- private String s = "";
- int pos = 0;
- int spos = 0;
-
- int _row = 1;
- int _col = 0;
- int _scalar = 0;
- public Input.Location getLocation() { return new Cartesian.Location(_col, _row, _scalar); }
- private BufferedReader br;
-
- char left = CharAtom.left;
- char right = CharAtom.right;
-
- boolean waiting = false;
- char waitingChar = ' ';
- boolean indenting = true;
- int indentation = 0;
- private ArrayList<Integer> istack = new ArrayList<Integer>();
- private static boolean debug = "true".equals(System.getProperty("tib.debug", "false"));
- public Character next() throws IOException {
- Character ret = nextc();
- if (debug) {
- if (ret==null) return null;
- else if (ret==left) System.err.print("\033[31m{\033[0m");
- else if (ret==right) System.err.print("\033[31m}\033[0m");
- else System.err.print(ret);
- }
- return ret;
- }
-
- Character waitingBrace = null;
- public Character nextc() throws IOException {
- char c;
- if (waitingBrace != null) {
- Character ret = waitingBrace;
- waitingBrace = null;
- return ret;
- }
- if (waiting) {
- waiting = false;
- c = waitingChar;
- } else {
- int i = br.read();
- if (i==-1) {
- if (istack.size() > 1) {
- istack.remove(istack.size()-1);
- return right;
- }
- return null;
- }
- c = (char)i;
- _scalar++;
- if (c=='\n') { _row++; _col=0; }
- else _col++;
- }
- if (indenting) {
- if (c==' ') { indentation++; return done(c); }
- if (c=='\n') { indentation = 0; if (blank) return nextc(); blank = true; waiting = true; waitingChar='\n'; return '\n'; }
- int last = istack.size()==0 ? -1 : istack.get(istack.size()-1);
- if (indentation==last) {
- if (blank) {
- indenting = false;
- waitingChar = c;
- waiting = true;
- waitingBrace = left;
- return right;
- //return nextc(numstates);
- }
- blank = false;
- indenting = false;
- return done(c);
- }
- blank = false;
- waitingChar = c;
- waiting = true;
- if (indentation > last) {
- indenting = false;
- istack.add(indentation);
- //System.out.print("\033[31m+"+indentation+"+\033[0m");
- return left;
- } else /*if (indentation < last)*/ {
- istack.remove(istack.size()-1);
- //System.out.print("\033[31m-"+last+"-\033[0m");
- blank = true;
- return right;
- }
- } else {
- blank = false;
- if (c=='\n') { indenting=true; indentation = 0; }
- return done(c);
- }
- }
-
- public Character done(char c) {
- switch(c) {
- case '{': return left;
- case '}': return right;
- default: return c;
- }
- }
- boolean blank = false;
-
-}
-