X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammarBindings.java;h=b70ddb8dc5f462a81d6f548db577abc1a4737c0b;hp=401536f2aca726718d96982cb84f6fd463d4bac2;hb=c4b4207ce1be50359c6bd8abe1d657ff8ae8ad6e;hpb=a7ba8d8a5f0cb7fbb5bf67f1a95f1cad5226c507 diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index 401536f..b70ddb8 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -15,7 +15,12 @@ public class MetaGrammarBindings { /** A grammar (a set of nonterminals) */ public static class GrammarNode extends HashMap { public @bind.as("Grammar") GrammarNode(NonTerminalNode[] nonterminals) { - for(NonTerminalNode nt : nonterminals) this.put(nt.name, nt); } + for(NonTerminalNode nt : nonterminals) { + if (this.get(nt.name)!=null) + throw new RuntimeException("duplicate definition of nonterminal \""+nt.name+"\""); + this.put(nt.name, nt); + } + } public String toString() { String ret = "[ "; for(NonTerminalNode nt : values()) ret += nt + ", "; @@ -327,7 +332,7 @@ public class MetaGrammarBindings { public static @bind.as("~") ElementNode tilde(final ElementNode e) { return new PostProcess(e) { public Element postProcess(Element e) { - return infer((Topology)Atom.toAtom(e).complement()); + return infer((Topology)Atom.toAtom(e).complement().minus(CharRange.braces)); } }; } public static @bind.as("Word") String word(String s) { return s; }