rename edu.berkeley.sbp.Cache to Grammar
authoradam <adam@megacz.com>
Tue, 27 Mar 2007 23:44:19 +0000 (19:44 -0400)
committeradam <adam@megacz.com>
Tue, 27 Mar 2007 23:44:19 +0000 (19:44 -0400)
darcs-hash:20070327234419-5007d-fcc7f31c972cdaf5ed1b7f1b90c313a4d36aaa48.gz

src/edu/berkeley/sbp/Grammar.java [moved from src/edu/berkeley/sbp/Cache.java with 93% similarity]
src/edu/berkeley/sbp/ParseFailed.java
src/edu/berkeley/sbp/Parser.java
src/edu/berkeley/sbp/Sequence.java
src/edu/berkeley/sbp/Union.java

similarity index 93%
rename from src/edu/berkeley/sbp/Cache.java
rename to src/edu/berkeley/sbp/Grammar.java
index c600454..9b332d8 100644 (file)
@@ -1,15 +1,22 @@
 // Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
 
 package edu.berkeley.sbp;
-import edu.berkeley.sbp.*;
 import edu.berkeley.sbp.util.*;
 import edu.berkeley.sbp.Sequence.Position;
 import java.io.*;
 import java.util.*;
-import java.lang.reflect.*;
-import java.lang.ref.*;
 
-abstract class Cache<Token> {
+/**
+ *  A collection of Elements and Sequences which only reference each other.
+ *
+ *  All analyses are done at the Grammar level, since a given
+ *  Element/Sequence can appear in multiple Grammars.  Some of these
+ *  analyses depend on which elements *reference* a given element,
+ *  rather than which elements *are referenced by* a given element.
+ *
+ *  This class is package-private because it is likely to change often.
+ */
+abstract class Grammar<Token> {
     protected Union rootUnion;
 
     public HashMap<Sequence, Topology> follow = new HashMap<Sequence, Topology>();
@@ -18,7 +25,7 @@ abstract class Cache<Token> {
     public HashSet<SequenceOrElement> all = new HashSet<SequenceOrElement>();
 
     abstract Topology<Token> emptyTopology();
-    public Cache(Union root) {
+    public Grammar(Union root) {
         this.rootUnion = root;
         if (root != null)
             for(Sequence s : root)
index b6a05e0..8e759a8 100644 (file)
@@ -83,7 +83,7 @@ public class ParseFailed extends Exception {
                 /*
                else if (p.pos-raise > 0)
                     barf(sb, n, indent, false, 1);
-                if (!new Cache(null, null).possiblyEpsilon(p.element()))
+                if (!new Grammar(null, null).possiblyEpsilon(p.element()))
                     break;
                 */
                 p = p.next();
index 64ad67a..de96760 100644 (file)
@@ -24,7 +24,7 @@ public abstract class Parser<Token, NodeType> {
     public abstract Topology<Token> emptyTopology();
 
     public String toString() { return pt.toString(); }
-    Cache cache() { return pt; }
+    Grammar cache() { return pt; }
 
     /** 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 {
@@ -76,7 +76,7 @@ public abstract class Parser<Token, NodeType> {
     // Table //////////////////////////////////////////////////////////////////////////////
 
     /** an SLR(1) parse table which may contain conflicts */
-    class Table extends Cache<Token> {
+    class Table extends Grammar<Token> {
 
         /** the start state */
         final State<Token>   start;
index 0ce5f55..968d78f 100644 (file)
@@ -20,7 +20,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
     final HashSet<Sequence> needs  = new HashSet<Sequence>();
     final HashSet<Sequence> hates  = new HashSet<Sequence>();
 
-    // FIXME: these are ugly -- migrate into Cache
+    // FIXME: these are ugly -- migrate into Grammar
     HashMap<Sequence,Boolean> canNeed = new HashMap<Sequence,Boolean>();
     HashMap<Sequence,Boolean> canKill = new HashMap<Sequence,Boolean>();
 
@@ -104,7 +104,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
         this.firstp = new Position(0, null);
     }
 
-    abstract Forest epsilonForm(Input.Region loc, Cache cache);
+    abstract Forest epsilonForm(Input.Region loc, Grammar cache);
 
     protected abstract <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Position p);
 
@@ -154,7 +154,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
 
         // Position /////////////////////////////////////////////////////////////////////////////////
 
-        final <T> Forest<T> rewrite(Input.Region loc, Cache cache) {
+        final <T> Forest<T> rewrite(Input.Region loc, Grammar cache) {
             if (this==firstp()) epsilonForm(loc, cache);
             for(int i=0; i<pos; i++) if (holder[i]==null) throw new Error("realbad " + i);
             for(int i=pos; i<elements.length; i++) {
@@ -219,7 +219,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
         public <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Position p) {
             return (Forest<T>)Forest.create(loc, result, null, false);
         }
-        Forest epsilonForm(Input.Region loc, Cache cache) {
+        Forest epsilonForm(Input.Region loc, Grammar cache) {
             return Forest.create(loc, result, null, false);
         }
     }
@@ -230,7 +230,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
         public Singleton(Element[] e, int idx) { super(e); this.idx = idx; }
         public <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Position p) { return args[idx]; }
         Sequence _clone() { return new Singleton(elements,idx); }
-        Forest epsilonForm(Input.Region loc, Cache cache) {
+        Forest epsilonForm(Input.Region loc, Grammar cache) {
             return ((Union)elements[idx]).epsilonForm(loc, cache);
         }
     }
@@ -251,7 +251,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
             for(int i=0; i<args.length; i++) if (!drops[i]) args2[j++] = args[i];
             return Forest.create(loc, (T)tag, args2, true);
         }
-        Forest epsilonForm(Input.Region loc, Cache cache) {
+        Forest epsilonForm(Input.Region loc, Grammar cache) {
             return Forest.create(loc, tag, new Forest[0], false);
         }
     }
@@ -284,7 +284,7 @@ public abstract class Sequence implements Iterable<Element>, SequenceOrElement {
             if (spacing) for(int i=0; i<50-len; i++) sb.append(' ');
             return sb;
         }
-        Forest epsilonForm(Input.Region loc, Cache cache) {
+        Forest epsilonForm(Input.Region loc, Grammar cache) {
             return Forest.create(loc, tag, new Forest[0], false);
         }
     }
index c164262..fddb09b 100644 (file)
@@ -74,7 +74,7 @@ public class Union extends Element implements Iterable<Sequence> {
     }
 
     /** the Forest which results from matching this Union against the empty string at region <tt>region</tt> */
-    Forest epsilonForm(Input.Region region, Cache cache) {
+    Forest epsilonForm(Input.Region region, Grammar cache) {
         viewed = true;
         Forest.Many epsilonForm = new Forest.Many();
         for(Sequence s : this)