+ public @bind.as("Grammar") GrammarNode(Object[] nt) {
+ add(nt);
+ }
+ private void add(Object[] obs) {
+ for(Object o : obs) {
+ if (o==null) continue;
+ else if (o instanceof Object[]) add((Object[])o);
+ else if (o instanceof NonTerminalNode) {
+ NonTerminalNode nt = (NonTerminalNode)o;
+ if (this.get(nt.name)!=null)
+ throw new RuntimeException("duplicate definition of nonterminal \""+nt.name+"\"");
+ this.put(nt.name, nt);
+ }
+ else if (o instanceof NonTerminalSource) add(((NonTerminalSource)o).getNonTerminals());
+ }
+ }