fix javadoc generation
[sbp.git] / src / edu / berkeley / sbp / ParseFailed.java
index 547ea95..fe8e247 100644 (file)
@@ -1,10 +1,11 @@
-// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
+// Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
 
 package edu.berkeley.sbp;
 import edu.berkeley.sbp.*;
-import edu.berkeley.sbp.Sequence.Position;
+import edu.berkeley.sbp.Sequence.Pos;
+import edu.berkeley.sbp.Sequence.Pos;
 import edu.berkeley.sbp.GSS.Phase;
-import edu.berkeley.sbp.GSS.Phase.Node;
+import edu.berkeley.sbp.StateNode;
 import edu.berkeley.sbp.util.*;
 import java.io.*;
 import java.util.*;
@@ -34,37 +35,41 @@ public class ParseFailed extends Exception {
         return ret.toString();
     }
 
-    private static boolean important(Position p) {
+    private static boolean important(Pos p) {
         if (p.isLast()) return false;
         if (p.element() == null) return false;
         if (!(p.element() instanceof Union)) return false;
         Union u = (Union)p.element();
-        if (u.synthetic) return false;
-        if (u.name==null) return false;
-        if (u.name.length() == 0) return false;
-        char c = u.name.charAt(0);
+        if (u.isSynthetic()) return false;
+        if (u.getName()==null) return false;
+        if (u.getName().length() == 0) return false;
+        char c = u.getName().charAt(0);
         return (c >= 'A' && c <= 'Z');
     }
 
-    static <Tok> void barf(HashMap<Element,Input.Location> sb, GSS.Phase<Tok>.Node n, int indent, boolean skip, int count, Input.Location loc) {
+    static <Tok> void barf(HashMap<Element,Input.Location> sb, StateNode n, int indent, boolean skip, int count, Input.Location loc) {
         if (count <= 0) {
             barf(sb, n, indent, skip, loc);
         } else {
-            for(GSS.Phase<Tok>.Node nn : n.parents())
-                barf(sb, nn, indent, skip, count-1, nn.phase().getPrevLocation());
+            /*
+              FIXME: removed
+            for(StateNode nn : (Iterable<StateNode>)n.parents())
+                barf(sb, nn, indent, skip, count-1, n.phase().getLocation());
+            */
         }
     }
-    static <Tok> void barf(HashMap<Element,Input.Location> sb, GSS.Phase<Tok>.Node n, int indent, boolean skip, Input.Location loc) {
+    static <Tok> void barf(HashMap<Element,Input.Location> sb, StateNode n, int indent, boolean skip, Input.Location loc) {
         if (touched.contains(n)) return;
         touched.add(n);
         String s = "";
         for(int i=0; i< indent; i++) s += " ";
-        GSS.Phase<Tok>.Node parent = n;
+        StateNode parent = n;
         boolean done = false;
         boolean alldone = false;
         boolean go = false;
         boolean force = false;
-        for(Position p : parent.state) {
+        for(Pos pp : (Iterable<Pos>)parent.state().positions()) {
+            Pos p = (Pos)pp;
             if (skip) p = p.next();
             int raise = 0;
             done = false;
@@ -80,9 +85,9 @@ public class ParseFailed extends Exception {
                 /*
                else if (p.pos-raise > 0)
                     barf(sb, n, indent, false, 1);
-                */
-                if (!new Walk.Cache().possiblyEpsilon(p.element()))
+                if (!new Grammar(null, null).possiblyEpsilon(p.element()))
                     break;
+                */
                 p = p.next();
                 raise++;
                 if (p.isLast()) {
@@ -97,16 +102,21 @@ public class ParseFailed extends Exception {
 
 
     // FIXME
-    private static HashSet<GSS.Phase.Node> touched = new HashSet<GSS.Phase.Node>();
-    static <Tok> void complain(GSS.Phase<Tok>.Node n, HashMap<String,HashSet<String>> errors, boolean force, int indent) {
+    private static HashSet<StateNode> touched = new HashSet<StateNode>();
+    static <Tok> void complain(StateNode n, HashMap<String,HashSet<String>> errors, boolean force, int indent) {
         if (touched.contains(n)) return;
         touched.add(n);
-        for(Position p : n.state) {
+        for(Pos p : (Iterable<Pos>)n.state()) {
             //if (!p.isLast() && !p.next().isLast()) continue;
             if (((p.isFirst() || p.isLast()) && !force)/* || p.owner().name==null*/ ||
                 !important(p)) {
-                for(Node n2 : n.parents())
-                    complain(n2, errors, force /*| p.isFirst()*/, indent);
+            /*
+              FIXME: removed
+                for(StateNode n2 : n.parents())
+                    complain(n2, errors, force
+                    //| p.isFirst()
+                , indent);
+            */
             } else {
                 String seqname = p.owner()/*.name*/+"";
                 HashSet<String> hs = errors.get(seqname);
@@ -130,36 +140,39 @@ public class ParseFailed extends Exception {
         return ANSI.purple(ret.toString());
     }
 
-    static void error(String message,
-                      Input.Location loc,
-                      Object token,
-                      Iterable<Node> nodes,
-                      Input.Region region,
-                      Input input,
-                      GSS gss) throws ParseFailed{
+    static void error(String message, GSS.Phase phase, Object token, Input.Region region) throws ParseFailed {
+        error(message,
+              token,
+              /*phase*/null,
+              region,
+              phase.getGSS().getInput(),
+              phase.getGSS());
+    }
+    private static void error(String message,
+                              Object token,
+                              Iterable<StateNode> nodes,
+                              Input.Region region,
+                              Input input,
+                              GSS gss) throws ParseFailed{
         String lookAhead = token==null ? "<EOF>" : token.toString();
         StringBuffer ret = new StringBuffer();
         ret.append(ANSI.bold(ANSI.red(message)));
-        if (token != null) {
-            ret.append(" \'");
-            ret.append(ANSI.cyan(StringUtil.escapify(token+"", "\\\'\r\n")));
-            ret.append("\'");
-        }
+        String toks = token+"";
         ret.append(" at ");
         ret.append(ANSI.yellow(region+""));
         if (input != null) {
             ret.append('\n');
             ret.append("     text: ");
             int budget = 60;
-            String second = input.showRegion(region);
+            String second = input.showRegion(region, 60);
             budget -= second.length();
             Input.Location after = region.getEnd();
             for(int i=0; i<10; i++) after = after.next() == null ? after : after.next();
-            String third = input.showRegion(region.getEnd().createRegion(after));
+            String third = input.showRegion(region.getEnd().createRegion(after), 60);
             budget -= third.length();
             Input.Location before = region.getStart();
             for(int i=0; i<budget; i++) before = before.prev() == null ? before : before.prev();
-            String first = input.showRegion(before.createRegion(region.getStart()));
+            String first = input.showRegion(before.createRegion(region.getStart()), 60);
             ret.append(ANSI.cyan(first));
             ret.append(ANSI.invert(ANSI.red(second)));
             ret.append(ANSI.cyan(third));
@@ -171,8 +184,9 @@ public class ParseFailed extends Exception {
             */
         }
         HashMap<Element,Input.Location> hm = new HashMap<Element,Input.Location>();
-        for(Node no : nodes)
-            barf(hm, no, 0, false, /*region.getStart()*/loc);
+        if (nodes!=null)
+            for(StateNode no : nodes)
+                barf(hm, no, 0, false, region.getStart());
         ret.append("\n expected: ");
         Set<Element> hs = hm.keySet();
         if (hs.size() == 1) {
@@ -186,15 +200,15 @@ public class ParseFailed extends Exception {
                 } else {
                     ret.append("\n        or " + ANSI.purple(s));
                 }
-                Input.Region reg = loc2.createRegion(region.getStart());
-                ret.append(" to match \"" + ANSI.cyan(input.showRegion(reg)) + "\" at " + ANSI.yellow(reg));
+                Input.Region reg = loc2.createRegion(region.getEnd());
+                ret.append(" to match \"" + ANSI.cyan(input.showRegion(reg, 60)) + "\" at " + ANSI.yellow(reg));
                 i++;
             }
         }
         /*
         ret.append("\n  The author of SBP apologizes for the these nearly-useless error messages:\n\n");
         HashMap<String,HashSet<String>> errors = new HashMap<String,HashSet<String>>();
-        for(Node n : nodes) {
+        for(StateNode n : nodes) {
             //System.out.println(n.state);
             complain(n, errors, false, 0);
         }