From d474c27d3c37b00d2b2ec2dc62d123d69c8edac9 Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 27 May 2007 19:31:52 -0400 Subject: [PATCH] GrammarAST.BacktickNode darcs-hash:20070527233152-5007d-77792ad5b79da0ee4ee3efecd8c4d45443c1438e.gz --- src/edu/berkeley/sbp/meta/GrammarAST.java | 19 +++++++++++-------- src/edu/berkeley/sbp/meta/MetaGrammar.java | 9 ++++----- 2 files changed, 15 insertions(+), 13 deletions(-) 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()); } diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index aadf9ec..cb138be 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -12,11 +12,6 @@ import java.io.*; class MetaGrammar { - /** create a grammar corresponding to the SBP metagrammar (meta.g) */ - public static Union newInstance() { - return GrammarAST.buildFromAST(MetaGrammar.meta, "s", new File[0]); - } - /** Used to rebuild MetaGrammar.java, and not for much else */ public static void main(String[] args) throws Exception { if (args.length != 2) { @@ -178,6 +173,8 @@ class MetaGrammar { + + // 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, "NonTerminal", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Word", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}), new edu.berkeley.sbp.Tree(null, "RHS", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "|", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Elements", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "NonTerminalReference", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Word", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }), @@ -951,3 +948,5 @@ new edu.berkeley.sbp.Tree(null, "Grammar", new edu.berkeley.sbp.Tree[] { new edu + + -- 1.7.10.4