- public Object _leftparen_(PreSequence[][] p) { return nonTerminal("anon"+(anon++), p, false, false); }
+ public Object _leftparen_(PreSequence[][] p) { return nonTerminal("anon"+(anon++), p, false, false); }
+ public Union nonTerminal(String str, PreSequence[][] s, boolean synthetic, boolean dropAll) {
+ Union n = str.equals(startSymbol) ? g : nt.get(str);
+ if (n == null) nt.put(str, n = new Union(str, synthetic));
+ if (dropAll) this.dropAll.add(n);
+ if (s==null) return n;
+ HashSet<Sequence> seqs = new HashSet<Sequence>();
+ for(int i=0; i<s.length; i++) {
+ if (s[i]==null) continue;
+ HashSet<Sequence> temp = new HashSet<Sequence>();
+ for(PreSequence pre : s[i]) {
+ pre.not.addAll(seqs);
+ Sequence seq = pre.buildSequence(n, false, dropAll);
+ temp.add(seq);
+ n.add(seq);
+ }
+ seqs.addAll(temp);
+ }
+ return n;
+ }
+
+