X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarAST.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarBuilder.java;h=63c43920805f96df7274c2a18b2668d2d5c9dc52;hp=ec734f77a502fed94ee482480896c57e22bec19d;hb=f17fca21d99030d325624f839efcd17bc93f1548;hpb=8a05c54202f3f5792bbd7146007c6718049fecd9 diff --git a/src/edu/berkeley/sbp/meta/GrammarBuilder.java b/src/edu/berkeley/sbp/meta/GrammarAST.java similarity index 97% rename from src/edu/berkeley/sbp/meta/GrammarBuilder.java rename to src/edu/berkeley/sbp/meta/GrammarAST.java index ec734f7..63c4392 100644 --- a/src/edu/berkeley/sbp/meta/GrammarBuilder.java +++ b/src/edu/berkeley/sbp/meta/GrammarAST.java @@ -39,7 +39,7 @@ public class GrammarBuilder { * @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads */ public static Union buildFromAST(Tree grammarAST, String startingNonterminal, File[] includes) { - return new GrammarBuilder(includes, "").buildGrammar(grammarAST, startingNonterminal); + return new GrammarAST(includes, "").buildGrammar(grammarAST, startingNonterminal); } public static Object illegalTag = ""; // this is the tag that should never appear in the non-dropped output FIXME @@ -47,17 +47,16 @@ public class GrammarBuilder { private final String prefix; private final File[] includes; - //public GrammarBuilder(String path) { this(path, ""); } - public GrammarBuilder(File[] includes, String prefix) { + public GrammarAST(File[] includes, String prefix) { this.prefix = prefix; this.includes = includes; } - public Union buildGrammar(Tree t, String rootNonTerminal) { - return ((GrammarBuilder.GrammarNode)walk(t)).build(rootNonTerminal); - } + // Methods ////////////////////////////////////////////////////////////////////////////// - private ElementNode epsilon = new LiteralNode(""); + private Union buildGrammar(Tree t, String rootNonTerminal) { + return ((GrammarAST.GrammarNode)walk(t)).build(rootNonTerminal); + } public Object[] walkChildren(Tree t) { Object[] ret = new Object[t.size()]; @@ -152,8 +151,8 @@ public class GrammarBuilder { return new NonTerminalNode(tag, seqs, false, null, false); } if (head.equals("TestCase")) - return new RegressionTests.TestCase((String)walk(t.child(0)), - (String)walk(t.child(1)), + return new RegressionTests.TestCase(walkString(t.child(0)), + walkString(t.child(1)), (String[])Reflection.coerce(walkChildren(t.child(2)), String[].class), (Union)walk(t.child(3)), false, @@ -177,8 +176,10 @@ public class GrammarBuilder { throw new RuntimeException("unknown head: \"" + head + "\" => " + (head.equals("..."))); } - /** A grammar (a set of nonterminals) */ - public class GrammarNode extends HashMap { + // Nodes ////////////////////////////////////////////////////////////////////////////// + + /** Root node of a grammar's AST; a set of named nonterminals */ + private class GrammarNode extends HashMap { public GrammarNode(NonTerminalNode[] nonterminals) { for(NonTerminalNode nt : nonterminals) { if (nt==null) continue;