package edu.berkeley.sbp.misc;
import edu.berkeley.sbp.util.*;
import edu.berkeley.sbp.*;
+import edu.berkeley.sbp.chr.*;
import java.util.*;
import java.io.*;
public class MetaGrammar extends StringWalker {
+ public static class Hack<T extends Input> extends Atom<T> {
+ private final Atom<T> a;
+ static final Topology leftright = CharRange.rightBrace.union(CharRange.leftBrace);
+ public Hack(Atom<T> a) { this.a = a; }
+ public Topology<T> top() { return a.minus(leftright); }
+ public String toString() { return "~"+a; }
+ }
+
+
public static Union make() throws Exception {
return ((MetaGrammar)new MetaGrammar().walk(meta)).done();
}
private String startSymbol;
private boolean strings;
- private Element set(Range.Set r) { if (strings) throw new Error(); return CharToken.set(r); }
- private Element string(String s) { return strings ? StringToken.string(s) : CharToken.string(s); }
- private Atom leftBrace() { return strings ? StringToken.leftBrace : CharToken.leftBrace; }
- private Atom rightBrace() { return strings ? StringToken.rightBrace : CharToken.rightBrace; }
+ private Element set(Range.Set r) { if (strings) throw new Error(); return CharRange.set(r); }
+ private Element string(String s) { return strings ? StringInput.string(s) : CharRange.string(s); }
+ private Atom leftBrace() { return strings ? StringInput.leftBrace : CharRange.leftBrace; }
+ private Atom rightBrace() { return strings ? StringInput.rightBrace : CharRange.rightBrace; }
public MetaGrammar() { this("s", false); }
public MetaGrammar(String s) { this(s, false); }
else if ("psylr".equals(head)) throw new Error("not supported");
else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
else if ("~".equals(head))
- return new Atom.Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0))));
+ return new Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0))));
else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
else if ("qprod".equals(head)) {
}
out.append("\n // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
- new CharToStringParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1().toJava(out);
+ new CharParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1().toJava(out);
out.append("\n // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
for(String s = br.readLine(); s != null; s = br.readLine()) out.append(s+"\n");