From: adam Date: Fri, 14 Jul 2006 02:39:05 +0000 (-0400) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~145 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=b1a5513197f7c776706fd5b5618574906f72b707 checkpoint darcs-hash:20060714023905-5007d-a317b72364def9efef63b899f8034474b25f3ff3.gz --- diff --git a/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java b/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java index de044d5..9ea5d7e 100644 --- a/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java +++ b/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java @@ -10,7 +10,7 @@ import java.lang.reflect.*; import java.io.*; // FIXME: non-static methods -public class AnnotationGrammarBindingResolver extends GrammarBindingResolver { +public class AnnotationGrammarBindingResolver extends Grammar.Bindings { private static boolean harsh = true; @@ -66,17 +66,6 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver { } - public Sequence resolveTag(Production p) { - Sequence ret = tryResolveTag(p); - if (ret != null) return ret; - String message = "could not find a Java method/class/ctor matching tag \""+p.tag+ - "\", nonterminal \""+"???"+"\" with " + p.elements.length + " arguments"; - if (harsh) { - throw new RuntimeException(message); - } else { - return Sequence.rewritingSequence(p.tag, p.elements, p.drops); - } - } // helper diff --git a/src/edu/berkeley/sbp/meta/Grammar.java b/src/edu/berkeley/sbp/meta/Grammar.java index 693a7ba..531105e 100644 --- a/src/edu/berkeley/sbp/meta/Grammar.java +++ b/src/edu/berkeley/sbp/meta/Grammar.java @@ -28,10 +28,15 @@ public class Grammar { * @param s the name of the "start symbol" * @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads */ - public static Union create(Tree t, String s, GrammarBindingResolver gbr) { + public static Union create(Tree t, String s, Grammar.Bindings gbr) { Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children()); return g.build(s, gbr); } + + public static class Bindings { + public Object repeatTag() { return null; } + public Sequence tryResolveTag(Production p) { return null; } + } } diff --git a/src/edu/berkeley/sbp/meta/GrammarBindingResolver.java b/src/edu/berkeley/sbp/meta/GrammarBindingResolver.java deleted file mode 100644 index b301f7d..0000000 --- a/src/edu/berkeley/sbp/meta/GrammarBindingResolver.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.berkeley.sbp.meta; -import edu.berkeley.sbp.util.*; -import edu.berkeley.sbp.*; -import edu.berkeley.sbp.chr.*; -import edu.berkeley.sbp.misc.*; -import edu.berkeley.sbp.bind.*; -import java.util.*; -import java.lang.annotation.*; -import java.lang.reflect.*; -import java.io.*; - -public class GrammarBindingResolver { - public Object repeatTag() { return null; } - public Sequence tryResolveTag(Production p) { return null; } - public Sequence resolveTag(Production p) { return null; } -} diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index e7c8b4f..ecde372 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -49,7 +49,7 @@ public class MetaGrammarBindings { for(NonTerminalNode nt : values()) ret += nt + ", "; return ret + " ]"; } - public Union build(String s, GrammarBindingResolver rm) { + public Union build(String s, Grammar.Bindings rm) { Context cx = new Context(this,rm); Union u = null; for(MetaGrammarBindings.NonTerminalNode nt : values()) { @@ -154,10 +154,11 @@ public class MetaGrammarBindings { } } } - public static @bind.as("=") NonTerminalNode go(@bind.arg String name, @bind.arg Seq[][] sequences) { return new NonTerminalNode(name, sequences, true); } + + public static @bind.as("=") NonTerminalNode go(@bind.arg String name, @bind.arg Seq[][] sequences) { + return new NonTerminalNode(name, sequences, true); } public static @bind.as("=") NonTerminalNode go(@bind.arg String name, @bind.arg String sep, @bind.arg Seq[][] sequences) { - return new NonTerminalNode(name, sequences, true, sep); - } + return new NonTerminalNode(name, sequences, true, sep); } public static class AnonUnionNode extends UnionNode { public @bind.as("(") AnonUnionNode(Seq[][] sequences) { @@ -177,31 +178,6 @@ public class MetaGrammarBindings { public char last; } - public static abstract class ElementNode { - public String getLabel() { return null; } - public String getOwnerTag() { return null; } - public boolean drop() { return false; } - public abstract Element build(Context cx, NonTerminalNode cnt); - } - - public static class Drop extends ElementNode { - public ElementNode e; - public Drop(ElementNode e) { this.e = e; } - public String getLabel() { return null; } - public boolean drop() { return true; } - public String getOwnerTag() { return e.getOwnerTag(); } - public Element build(Context cx, NonTerminalNode cnt) { return e.build(cx, cnt); } - } - - public static class Label extends ElementNode { - public String label; - public ElementNode e; - public Label(String label, ElementNode e) { this.e = e; this.label = label; } - public String getLabel() { return label; } - public String getOwnerTag() { return e.getOwnerTag(); } - public Element build(Context cx, NonTerminalNode cnt) { return e.build(cx, cnt); } - } - public static /*abstract*/ class Seq { HashSet and = new HashSet(); HashSet not = new HashSet(); @@ -352,17 +328,6 @@ public class MetaGrammarBindings { : Sequence.repeatMaximal(e.build(cx, null), zero, many, infer(sep.build(cx, null)), cx.rm.repeatTag()); } } - public static class Constant extends ElementNode { - Element constant; - public Constant(Element constant) { this.constant = constant; } - public Element build(Context cx, NonTerminalNode cnt) { return constant; } - } - public abstract static class PostProcess extends ElementNode { - ElementNode e; - public PostProcess(ElementNode e) { this.e = e; } - public Element build(Context cx, NonTerminalNode cnt) { return postProcess(e.build(cx, cnt)); } - public abstract Element postProcess(Element e); - } // FIXME: it would be nice if we could hoist this into "Rep" public static @bind.as("++") ElementNode plusmax(final ElementNode e) @@ -413,8 +378,8 @@ public class MetaGrammarBindings { public HashMap map = new HashMap(); public GrammarNode grammar; public String cnt = null; - public GrammarBindingResolver rm; - public Context(GrammarNode g, GrammarBindingResolver rm) { + public Grammar.Bindings rm; + public Context(GrammarNode g, Grammar.Bindings rm) { this.grammar = g; this.rm = rm; } @@ -427,7 +392,7 @@ public class MetaGrammarBindings { } return ret; } - public Context(Tree t, GrammarBindingResolver rm) { + public Context(Tree t, Grammar.Bindings rm) { this.rm = rm; Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); this.grammar = (GrammarNode)red.invoke(t); @@ -454,4 +419,39 @@ public class MetaGrammarBindings { } + public static class Constant extends ElementNode { + Element constant; + public Constant(Element constant) { this.constant = constant; } + public Element build(Context cx, NonTerminalNode cnt) { return constant; } + } + public abstract static class PostProcess extends ElementNode { + ElementNode e; + public PostProcess(ElementNode e) { this.e = e; } + public Element build(Context cx, NonTerminalNode cnt) { return postProcess(e.build(cx, cnt)); } + public abstract Element postProcess(Element e); + } + public static abstract class ElementNode { + public String getLabel() { return null; } + public String getOwnerTag() { return null; } + public boolean drop() { return false; } + public abstract Element build(Context cx, NonTerminalNode cnt); + } + + public static class Drop extends ElementNode { + public ElementNode e; + public Drop(ElementNode e) { this.e = e; } + public String getLabel() { return null; } + public boolean drop() { return true; } + public String getOwnerTag() { return e.getOwnerTag(); } + public Element build(Context cx, NonTerminalNode cnt) { return e.build(cx, cnt); } + } + + public static class Label extends ElementNode { + public String label; + public ElementNode e; + public Label(String label, ElementNode e) { this.e = e; this.label = label; } + public String getLabel() { return label; } + public String getOwnerTag() { return e.getOwnerTag(); } + public Element build(Context cx, NonTerminalNode cnt) { return e.build(cx, cnt); } + } } diff --git a/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java b/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java index 003ae0a..ef1ce3b 100644 --- a/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java +++ b/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java @@ -9,13 +9,10 @@ import java.lang.annotation.*; import java.lang.reflect.*; import java.io.*; -public class TaggingGrammarBindingResolver extends GrammarBindingResolver { +public class TaggingGrammarBindingResolver extends Grammar.Bindings { public Object repeatTag() { return null; } public Sequence tryResolveTag(Production p) { if (p.tag==null) return null; return Sequence.rewritingSequence(p.tag, p.elements, p.drops); } - public Sequence resolveTag(Production p) { - return Sequence.rewritingSequence(p.tag, p.elements, p.drops); - } } diff --git a/src/edu/berkeley/sbp/misc/Demo.java b/src/edu/berkeley/sbp/misc/Demo.java index 3d0a3a6..a4cc7ff 100644 --- a/src/edu/berkeley/sbp/misc/Demo.java +++ b/src/edu/berkeley/sbp/misc/Demo.java @@ -39,7 +39,7 @@ public class Demo { Parser metaGrammarParser = new CharParser(MetaGrammar.newInstance()); Tree parsedGrammar = metaGrammarParser.parse(new CharInput(new FileInputStream(s[0]))).expand1(); - GrammarBindingResolver gbr = new AnnotationGrammarBindingResolver(Math.class); + Grammar.Bindings gbr = new AnnotationGrammarBindingResolver(Math.class); Union mathGrammar = Grammar.create(parsedGrammar, "Expr", gbr); Parser mathParser = new CharParser(mathGrammar);