X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammarBindings.java;h=37635a54223235c877e29ee2827ed5e1151b40c8;hp=cae7f13b6f62afb3f74872f2d831a176e183dd3d;hb=256a398ff08c792eb94941b7e7d59d01bff86a94;hpb=184c7d30b66e1e2ae9ce2c0251cb3b65fd80e893 diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index cae7f13..37635a5 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -13,12 +13,12 @@ import java.io.*; public class MetaGrammarBindings { /** A grammar (a set of nonterminals) */ - public static class Grammar extends HashMap { - public @bind Grammar(NonTerminal[] nonterminals) { - for(NonTerminal nt : nonterminals) this.put(nt.name, nt); } + public static class GrammarNode extends HashMap { + public @bind.as("Grammar") GrammarNode(NonTerminalNode[] nonterminals) { + for(NonTerminalNode nt : nonterminals) this.put(nt.name, nt); } public String toString() { String ret = "[ "; - for(NonTerminal nt : values()) ret += nt + ", "; + for(NonTerminalNode nt : values()) ret += nt + ", "; return ret + " ]"; } } @@ -46,13 +46,13 @@ public class MetaGrammarBindings { } } - public static class NonTerminal extends UnionNode { + public static class NonTerminalNode extends UnionNode { public boolean rep; public String name = null; public String sep = null; - public @bind NonTerminal(@bind.arg String name, @bind.arg Seq[][] sequences) { this(name, sequences, false); } - public NonTerminal(String name, Seq[][] sequences, boolean rep) { this(name, sequences, rep, null); } - public NonTerminal(String name, Seq[][] sequences, boolean rep, String sep) { + public @bind.as("NonTerminal") NonTerminalNode(@bind.arg String name, @bind.arg Seq[][] sequences) { this(name, sequences, false); } + public NonTerminalNode(String name, Seq[][] sequences, boolean rep) { this(name, sequences, rep, null); } + public NonTerminalNode(String name, Seq[][] sequences, boolean rep, String sep) { this.name = name; this.sequences = sequences; this.rep = rep; @@ -90,9 +90,9 @@ public class MetaGrammarBindings { } } } - public static @bind.as("=") NonTerminal go(@bind.arg String name, @bind.arg Seq[][] sequences) { return new NonTerminal(name, sequences, true); } - public static @bind.as("=") NonTerminal go(@bind.arg String name, @bind.arg String sep, @bind.arg Seq[][] sequences) { - return new NonTerminal(name, sequences, true, sep); + public static @bind.as("=") NonTerminalNode go(@bind.arg String name, @bind.arg Seq[][] sequences) { return new NonTerminalNode(name, sequences, true); } + public static @bind.as("=") NonTerminalNode go(@bind.arg String name, @bind.arg String sep, @bind.arg Seq[][] sequences) { + return new NonTerminalNode(name, sequences, true, sep); } public static class AnonUnionNode extends UnionNode { @@ -225,7 +225,7 @@ public class MetaGrammarBindings { public static @bind.as(")") void close(String foo) { throw new Error("not supported"); } public static @bind.as("()") ElementNode epsilon() { return new Constant(Union.epsilon); } - public static @bind class NonTerminalReference extends ElementNode { + public static @bind.as("NonTerminalReference") class NonTerminalReferenceNode extends ElementNode { public @bind.arg String nonTerminal; public Element build(MetaGrammar.Context cx) { return cx.get(nonTerminal); } } @@ -315,7 +315,7 @@ public class MetaGrammarBindings { public static @bind.as("^^") void doublecaret(final ElementNode e) { throw new Error("not implemented"); } - //public static @bind.as("(") ElementNode subexpression(Seq[][] rhs) { return new NonTerminal(rhs); } + //public static @bind.as("(") ElementNode subexpression(Seq[][] rhs) { return new NonTerminalNode(rhs); } public static @bind.as("Word") String word(String s) { return s; } public static @bind.as("Quoted") String quoted(String s) { return s; }