X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarAST.java;h=297886b36f69cfe5427d71d5020aacf9a04b2dc5;hp=05c7b39dc7394dac4cc448b59f5a6dbc70f76422;hb=d474c27d3c37b00d2b2ec2dc62d123d69c8edac9;hpb=013262fd96a3dfc4c2cd7a0ba320dd7981ce678c
diff --git a/src/edu/berkeley/sbp/meta/GrammarAST.java b/src/edu/berkeley/sbp/meta/GrammarAST.java
index 05c7b39..297886b 100644
--- a/src/edu/berkeley/sbp/meta/GrammarAST.java
+++ b/src/edu/berkeley/sbp/meta/GrammarAST.java
@@ -21,7 +21,7 @@ public class GrammarAST {
* parsing with this Union should be provided to buildFromAST
*/
public static Union getMetaGrammar() {
- return MetaGrammar.newInstance();
+ return buildFromAST(MetaGrammar.meta, "s", new File[0]);
}
/**
@@ -107,7 +107,7 @@ public class GrammarAST {
if (head.equals("!")) return new DropNode(walkElement(t.child(0)));
if (head.equals("^")) return new LiteralNode(walkString(t.child(0)), true);
- if (head.equals("`")) return walkElement(t.child(0)).lifted();
+ if (head.equals("`")) return new BacktickNode(walkElement(t.child(0)));
if (head.equals("Quoted")) return stringifyChildren(t);
if (head.equals("Literal")) return new LiteralNode(walkString(t.child(0)));
if (head.equals("->")) return walkSeq(t.child(0)).follow(walkElement(t.child(1)));
@@ -154,7 +154,7 @@ public class GrammarAST {
try {
String newPrefix = t.size()<2 ? "" : (walkString(t.child(1))+".");
FileInputStream fis = new FileInputStream(file);
- Tree tr = new CharParser(MetaGrammar.newInstance()).parse(fis).expand1();
+ Tree tr = new CharParser(getMetaGrammar()).parse(fis).expand1();
return (GrammarNode)new GrammarAST(includes, newPrefix).walk(tr);
} catch (Exception e) {
throw new RuntimeException("while parsing " + file, e);
@@ -207,10 +207,9 @@ public class GrammarAST {
}
}
+ /** a node in the AST which is resolved into an Element */
private abstract class ElementNode {
- public boolean lifted = false;
- public Seq ownerSeq = null;
- public ElementNode lifted() { this.lifted = true; return this; }
+ public boolean isLifted() { return false; }
public boolean drop(Context cx) { return false; }
public Atom toAtom(Context cx) { throw new Error("can't convert a " + this.getClass().getName() + " to an atom: " + this); }
public abstract Element build(Context cx, NonTerminalNode cnt, boolean dropall);
@@ -314,7 +313,6 @@ public class GrammarAST {
for(int i=0; i)_e.toAtom(cx).complement()); }