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()); }