X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=03f8f97e864a16a4b825c70c377fe4eb232a7013;hp=4b5f707c6b3db64522736e2b830701ec114fc990;hb=6a2ea790f843e058c7e67d3c7d1deebadcfe1fd5;hpb=3468ad83256a1b996f5ddc4406a040ee72f0274a diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 4b5f707..03f8f97 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -1,11 +1,21 @@ 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 extends Atom { + private final Atom a; + static final Topology leftright = CharRange.rightBrace.union(CharRange.leftBrace); + public Hack(Atom a) { this.a = a; } + public Topology top() { return a.minus(leftright); } + public String toString() { return "~"+a; } + } + + public static Union make() throws Exception { return ((MetaGrammar)new MetaGrammar().walk(meta)).done(); } @@ -123,7 +133,7 @@ public class MetaGrammar extends StringWalker { 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)) { @@ -278,7 +288,7 @@ public class MetaGrammar extends StringWalker { } 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");