X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FDemo.java;h=b118bbfdfc3a8f4247fb2adb865dabf4fb141279;hp=4e0dc1bdbb1bdcea565d4f8bdbd929b4aa1e9e04;hb=5fdbef59b07d4769f79337e77d1ee6c1d5762f52;hpb=76038cc31d71c6e7c0e6352f9c21ebd320e5c0cc diff --git a/src/edu/berkeley/sbp/misc/Demo.java b/src/edu/berkeley/sbp/misc/Demo.java index 4e0dc1b..b118bbf 100644 --- a/src/edu/berkeley/sbp/misc/Demo.java +++ b/src/edu/berkeley/sbp/misc/Demo.java @@ -1,21 +1,57 @@ package edu.berkeley.sbp.misc; -import edu.berkeley.sbp.util.*; + import edu.berkeley.sbp.*; import edu.berkeley.sbp.chr.*; +import edu.berkeley.sbp.misc.*; +import edu.berkeley.sbp.meta.*; +import edu.berkeley.sbp.bind.*; +import edu.berkeley.sbp.util.*; import java.util.*; import java.io.*; public class Demo { + + /** our grammar class */ + public static class Math { + + public static @bind.as("(") Expr parenthesis(Expr e) { return e; } + public static class Expr implements Reflection.Show { } + + public static @bind.as("Expr") class Numeric extends Expr { + public @bind.arg String numeric; + } + + public static class BinOp extends Expr { + public @bind.arg Expr left; + public @bind.arg Expr right; + } + + public static @bind.as("*") class Multiply extends BinOp { } + public static @bind.as("/") class Divide extends BinOp { } + public static @bind.as("+") class Add extends BinOp { } + public static @bind.as("-") class Subtract extends BinOp { } + } + + + // invoke "java -jar edu.berkeley.sbp.jar edu.berkeley.sbp.misc.Demo tests/demo.g " public static void main(String[] s) throws Exception { - /* - Tree gram = new CharParser(MetaGrammar.make()).parse(new FileInputStream(s[0])).expand1(); - MetaGrammar g = (MetaGrammar)new MetaGrammar().walk(gram); - Union meta = g.done(); - //Tree out = new CharParser(meta).parse(new FileInputStream(s[1])).expand1(); - Forest out = new CharParser(meta).parse(new FileInputStream(s[1])); - GraphViz gv = new GraphViz(); - out.toGraphViz(gv); - gv.dump(new PrintWriter(new OutputStreamWriter(System.out))); - */ + + Parser metaGrammarParser = new CharParser(MetaGrammar.newInstance()); + Tree parsedGrammar = metaGrammarParser.parse(new CharInput(new FileInputStream(s[0]))).expand1(); + Grammar.Bindings gbr = new AnnotationGrammarBindings(Math.class); + Union mathGrammar = Grammar.create(parsedGrammar, "Expr", gbr); + Parser mathParser = new CharParser(mathGrammar); + + System.out.println("about to parse: \""+s[1]+"\""); + Tree tree = mathParser.parse(new CharInput(new StringReader(s[1]))).expand1(); + + // below is ugly voodoo which will go away very soon. ignore it. + Tree.TreeFunctor tf = (Tree.TreeFunctor)tree.head(); + Math.Expr e = (Math.Expr)tf.invoke(tree); + // above is ugly voodoo which will go away very soon. ignore it. + + System.out.println("done!"); + System.out.println(Reflection.show(e)); } + }