checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / MetaGrammarBindings.java
index 742918b..c7952b0 100644 (file)
@@ -87,6 +87,9 @@ public class MetaGrammarBindings {
 
     public static @bind.as("#import") GrammarNode poundimport(String fileName, String as) {
         if (as==null) as = "";
+        else if ("".equals(as)) { }
+        else as = as +".";
+        
         System.err.println("#import " + fileName + " as " + as);
         try {
             Tree t = new CharParser(MetaGrammar.make()).parse(new FileInputStream(fileName)).expand1();
@@ -214,14 +217,14 @@ public class MetaGrammarBindings {
         }
         public Seq(ElementNode e) { this(new ElementNode[] { e }); }
         public Seq(ElementNode[] elements) { this.elements = elements; }
-        public Seq tag(String tag) { this.tag = tag; return this; }
+        public Seq tag(String tag) { this.tag = prefix+tag; return this; }
         public Seq follow(ElementNode follow) { this.follow = follow; return this; }
         public Seq dup() {
             Seq ret = new Seq(elements);
             ret.and.addAll(and);
             ret.not.addAll(not);
             ret.follow = follow;
-            ret.tag = tag;
+            ret.tag = prefix+tag;
             return ret;
         }
         public Seq and(Seq s) { and.add(s); s.lame = true; return this; }
@@ -246,7 +249,7 @@ public class MetaGrammarBindings {
         }
         public Sequence build0(Context cx, boolean lame, NonTerminalNode cnt) {
             boolean dropAll = lame;
-            if (tag!=null && "()".equals(tag)) dropAll = true;
+            if (tag!=null && tag.endsWith("()")) dropAll = true;
             boolean[] drops = new boolean[elements.length];
             Element[] els = new Element[elements.length];
             for(int i=0; i<elements.length; i++) {
@@ -383,8 +386,9 @@ public class MetaGrammarBindings {
     { return new Drop(e); }
 
     public static @bind.as("^")   ElementNode caret(final String s) {
+        final String thePrefix = prefix;
         return new Drop(new Constant(CharRange.string(s)) {
-                public String getOwnerTag() { return s; }
+                public String getOwnerTag() { return thePrefix+s; }
             });
     }