X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FDemo.java;h=2846d7c841e17ae2fbc59817307c6874c665c66a;hp=92726187d3b8f47c9d6c45a13c0373eb54534c0c;hb=16460a4ebf976fddbcb4dd79f1fa0b010d61602b;hpb=a96edcbb9051f33f65256dcd5adcbae6925956eb diff --git a/src/edu/berkeley/sbp/misc/Demo.java b/src/edu/berkeley/sbp/misc/Demo.java index 9272618..2846d7c 100644 --- a/src/edu/berkeley/sbp/misc/Demo.java +++ b/src/edu/berkeley/sbp/misc/Demo.java @@ -1,19 +1,58 @@ +// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license + 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.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. + TreeFunctor tf = (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)); } + */ }