checkpoint
authoradam <adam@megacz.com>
Thu, 30 Mar 2006 19:03:09 +0000 (14:03 -0500)
committeradam <adam@megacz.com>
Thu, 30 Mar 2006 19:03:09 +0000 (14:03 -0500)
darcs-hash:20060330190309-5007d-f536654062e5431d8a49dc9fbacf8cf0994fc059.gz

src/edu/berkeley/sbp/Atom.java
src/edu/berkeley/sbp/Input.java
src/edu/berkeley/sbp/Parser.java
src/edu/berkeley/sbp/misc/MetaGrammar.java
src/edu/berkeley/sbp/tib/Tib.java

index 32e7f0f..6c7a25e 100644 (file)
@@ -11,7 +11,7 @@ import edu.berkeley.sbp.*;
 public abstract class Atom<T> extends Element implements Topology<T> {
 
     protected abstract Topology<T> top();
-    public    abstract String toString();
+    public    abstract String       toString();
     public             StringBuffer toString(StringBuffer sb) { sb.append(this); return sb; }
 
     // Topology Thunks //////////////////////////////////////////////////////////////////////////////
@@ -28,9 +28,10 @@ public abstract class Atom<T> extends Element implements Topology<T> {
     public int               hashCode()                 { return top().hashCode(); }
     public boolean           equals(Object o)           { return o != null && o instanceof Atom && ((Atom)o).top().equals(top()); }
 
-    // Subclasses //////////////////////////////////////////////////////////////////////////////
-
-    
+    /** if all expressions matching <tt>e</tt> are exactly one token
+     *  long, <b>attempt to</b> return an Atom representing that token
+     *  (undecidable in general; only works in trivial cases)
+     */
     public static Topology toAtom(Element e) {
         if (e instanceof Atom) return (Atom)e;
         if (e instanceof Sequence) return ((Sequence)e).toAtom();
index a2c9baa..eeb3cc1 100644 (file)
@@ -10,7 +10,7 @@ import edu.berkeley.sbp.util.*;
 public interface Input<Token> {
 
     /** returns the token just beyond the current location and advances beyond it */
-    public Token    next(int numstates, int resets, int waits) throws IOException;
+    public Token    next() throws IOException;
 
     /** returns the location the input stream is currently at */
     public Location getLocation();
index 31bd1b3..bbcb032 100644 (file)
@@ -21,14 +21,14 @@ public abstract class Parser<Tok, Result> {
     public Forest<Result> parse(Input<Tok> input) throws IOException, ParseFailed {
         GSS gss = new GSS();
         Input.Location loc = input.getLocation();
-        GSS.Phase current = gss.new Phase<Tok>(null, this, null, input.next(1, 0, 0), loc, null);
+        GSS.Phase current = gss.new Phase<Tok>(null, this, null, input.next(), loc, null);
         current.newNode(null, Forest.leaf(null, null, null), pt.start, true);
         int count = 1;
         for(;;) {
             loc = input.getLocation();
             current.reduce();
             Forest forest = current.token==null ? null : shiftToken((Tok)current.token, loc);
-            GSS.Phase next = gss.new Phase<Tok>(current, this, current, input.next(count, gss.resets, gss.waits), loc, forest);
+            GSS.Phase next = gss.new Phase<Tok>(current, this, current, input.next(), loc, forest);
             count = next.size();
             if (current.isDone()) return (Forest<Result>)gss.finalResult;
             current = next;
index bdb8096..5ea468d 100644 (file)
@@ -527,6 +527,7 @@ public class MetaGrammar extends StringWalker {
 
 
 
+
         // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
 new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "=", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
         new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "psx", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "ps", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "!", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "nonTerminal", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
@@ -1188,3 +1189,4 @@ new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu
 
 
 
+
index a30e269..93f2ce1 100644 (file)
@@ -53,8 +53,8 @@ public class Tib implements Input<Character> {
     boolean indenting = true;
     int indentation = 0;
     private ArrayList<Integer> istack = new ArrayList<Integer>();
-    public Character next(int numstates, int resets, int waits) throws IOException {
-        Character ret = nextc(numstates, resets);
+    public Character next() throws IOException {
+        Character ret = nextc();
         if      (ret==null) return null;
         else if (ret==left)  System.out.print("\033[31m{\033[0m");
         else if (ret==right) System.out.print("\033[31m}\033[0m");
@@ -63,7 +63,7 @@ public class Tib implements Input<Character> {
     }
 
     Character waitingBrace = null;
-    public Character nextc(int numstates, int resets) throws IOException {
+    public Character nextc() throws IOException {
         char c;
         if (waitingBrace != null) {
             Character ret = waitingBrace;
@@ -88,7 +88,7 @@ public class Tib implements Input<Character> {
         }
         if (indenting) {
             if (c==' ') { indentation++; return done(c); }
-            if (c=='\n') { indentation = 0; if (blank) return nextc(numstates, resets); blank = true; waiting = true; waitingChar='\n'; return '\n'; }
+            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) {