- // MetaGrammar //////////////////////////////////////////////////////////////////////////////
-
- public Object _star_(Element r) { return new Rep(r, null, false, true); }
- public Union _colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminalZ(s, p); }
- public Union _bang__colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminalZ(s, p, true); }
- public Union _colon__colon__equals_(boolean q, String s, PreSequence[][] p) { return nonTerminalZ(s, p, q); }
- public Element epsilon(Object o, Object b) { return epsilon; }
- public Element _rightparen_(Object e) { return SELF; }
-
- public PreSequence _amp_(PreSequence p, Object[] o) { return p.and(new PreSequence(o, null, true).buildSequence(null, true, false)); }
- public PreSequence _amp__tilde_(PreSequence p, Object[] o) { return p.not(new PreSequence(o, null, true).buildSequence(null, true, false)); }
-
- public Element _bang_(Element r) { return r; }
- public Object care(String s) { return new MyLift(s); }
- public Object _caret_(String s) { return new MyLift(s); }
- public Object _leftparen__rightparen_() { return epsilon; }
-
- public Object _leftparen_(PreSequence[][] p) { return nonTerminalZ(p); }
- public PreSequence[] alternatives(PreSequence[] s) { return s; }
- public Union nonTerminal(String s) { return nonTerminalX(s, false, false); }
- public Union nonTerminalY(String s) { return nonTerminalX(s, false, false); }
- public Union nonTerminalX(String s, boolean synthetic, boolean dropAll) {
- Union n = s.equals(startSymbol) ? g : nt.get(s);
- if (n == null) nt.put(s, n = new Union(s, synthetic));
- if (dropAll) this.dropAll.add(n);
- return n;
- }
- public Union nonTerminalZ(PreSequence[][] p) { return nonTerminalX("anon"+(anon++), p, false, false); }
- public Union nonTerminalZ(String s, PreSequence[][] p) { return nonTerminalX(s, p, false, false); }
- public Union nonTerminalZ(String s, PreSequence[][] p, boolean q) { return nonTerminalX(s, p, false, q); }
- public Object _backslash__leftbrace_(String s) { return SELF; }
- public Object _leftbrace_(String s) { return SELF; }
- public Object _plus_(final Element r) { return new Rep(r, null, false, false); }
- public Object[] _slash_(Object[] o, Object sep) {
- if (o.length <= 1) return o;
- Object[] ret = new Object[o.length * 2 - 1];
- for(int i=0; i<o.length; i++) {
- Object oi = o[i];
- ret[i*2] = oi;
- if (i*2+1<ret.length) ret[i*2+1] = new MyDrop(sep);
- }
- return ret;
- }
- public Object _plus__slash_(final Element r, Object s) { return new Rep(r, (Element)s, false, false); }
- public Object _star__slash_(final Element r, Object s) { return new Rep(r, (Element)s, false, true); }
- public Object _star__star_(final Element r) { return new Rep(r, null, true, true); }
- public Object _plus__plus_(final Element r) { return new Rep(r, null, true, false); }
- public Element _question_(final Element r) { return Repeat.maybe(r); }
- public MetaGrammar gram(Object o, MetaGrammar g, Object o2) { return g; }
- public MetaGrammar grammar(Object[] o) { return this; }
- public MetaGrammar grammar(Object o, Union[] u, Object x) { return this; }
- public char _backslash_n() { return '\n'; }
- public char _backslash_r() { return '\r'; }
- public Object literal(String s) { return new MyDrop(CharToken.string(s)); }
- public Range _minus_(char a, char b) { return new Range(a, b); }
- public Element _leftbracket_ (Range[] rr) { return ranges(null, rr); }
- public Element _leftbracket__tilde_(Range[] rr) { return ranges("~", rr); }
- public Range range(char a) { return new Range(a, a); }
- public Element ranges(Object o, Range[] rr) {
- Range.Set ret = !"~".equals(o+"") ? new Range.Set() : new Range.Set(new Range(true, true));
- if (rr != null)
- for(Range r : rr)
- if (!"~".equals(o+"")) ret.add(r);
- else ret.remove(r);
- return CharToken.set(ret);
- }
-
-