- /** parse <tt>input</tt>, and return the shared packed parse forest (or throw an exception) */
- public Forest<NodeType> parse(Input<Token> input) throws IOException, ParseFailed {
- GSS gss = new GSS(input);
- Input.Location loc = input.getLocation();
- Token tok = input.next();
- GSS.Phase current = gss.new Phase<Token>(null, null, tok, loc, input.getLocation(), null);
- current.newNode(new Result(Forest.create(loc.createRegion(loc), null, null, false), null, null), pt.start, true);
- int count = 1;
- for(int idx=0;;idx++) {
- Input.Location oldloc = loc;
- current.reduce();
- Forest forest = current.token==null ? null : shiftToken((Token)current.token, loc);
- loc = input.getLocation();
- Token nextToken = input.next();
- GSS.Phase next = gss.new Phase<Token>(current, current, nextToken, loc, input.getLocation(), forest);
-
- /*
- FileOutputStream fos = new FileOutputStream("out-"+idx+".dot");
- PrintWriter p = new PrintWriter(new OutputStreamWriter(fos));
- GraphViz gv = new GraphViz();
- for(Object n : current)
- ((Node)n).toGraphViz(gv);
- gv.dump(p);
- p.flush();
- p.close();
- */
-
- count = next.size();
- if (current.isDone()) return (Forest<NodeType>)gss.finalResult;
- current = next;
+ private boolean verbose = false;;
+ private static final char[] spin = new char[] { '-', '\\', '|', '/' };
+ private int spinpos = 0;
+ private long last = 0;
+ void spin() {
+ if (verbose) {
+ long now = System.currentTimeMillis();
+ if (now-last < 70) return;
+ last = now;
+ System.err.print("\r " + spin[spinpos++ % (spin.length)]+ANSI.clreol()+"\r");