X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FDemo.java;h=f163d93658d6e8434ff67a7571d046bda1b0657c;hp=9c205d8670c78212a5024cdc3388c5f0690edf80;hb=74e53cbf7227f5958ff7495abe31cb0462d62c4e;hpb=9a51c5df6d121f44c34a60fea128c5da7c3dba87 diff --git a/src/edu/berkeley/sbp/misc/Demo.java b/src/edu/berkeley/sbp/misc/Demo.java index 9c205d8..f163d93 100644 --- a/src/edu/berkeley/sbp/misc/Demo.java +++ b/src/edu/berkeley/sbp/misc/Demo.java @@ -30,9 +30,11 @@ public class Demo { Union meta = mgf.get("s").build(bc); System.err.println("parsing " + s[1]); - res = new CharParser(meta).parse(new FileInputStream(s[1])).expand1(); + Tree t = new CharParser(meta).parse(new FileInputStream(s[1])).expand1(); - System.out.println(res); + System.out.println(t.toPrettyString()); + Reducer red = (Reducer)t.head(); + System.out.println(red.reduce(t)); } public static class ReflectiveMeta extends MetaGrammar.Meta { @@ -66,6 +68,26 @@ public class Demo { if (match((nonterminal)con.getAnnotation(nonterminal.class), c, s)) return true; return false; } + public Object repeatTag() { + return new Reducer() { + public String toString() { return "[**]"; } + public Object reduce(Tree t) { + Object[] ret = new Object[t.numChildren()]; + for(int i=0; i name.lastIndexOf('.')) { len--; ofs++; } + */ String[] names = new String[len]; arg[] argtags = new arg[len]; for(int i=0; i") Seq arrow(Seq s, Element e) { return null; } + public static class El { } + public static /*abstract*/ @nonterminal("Sequence") class Seq extends El { } + public static @tag("&") Seq and(Sequence s, El[] elements) { return new Seq(); } + public static @tag("&~") Seq andnot(Sequence s, El[] elements) { return new Seq(); } + public static @tag Seq ps(El[] elements) { return new Seq(); } + public static @tag Seq psx(Seq s) { return s; } + public static @tag("::") Seq tag(String tagname, Seq seq) { return new Seq(); } + public static @tag(":") void colon(String s, El e) { } + public static @tag(")") void close(String foo) { } + public static @tag("/") Seq slash(Seq s, El e) { return new Seq(); } + public static @tag("->") Seq arrow(Seq s, El e) { return new Seq(); } - public @tag("nonTerminal") class NonTerminalReference { public @arg String nonTerminal; } - public @tag("literal") class StringLiteral { public @arg String string; } - public @tag("()") class Epsilon { } - public @tag("{") class Tree { @arg Seq body; } - public @tag("[") class CharClass { public CharClass(Range[] ranges) { } } + public static @tag("nonTerminal") class NonTerminalReference extends El { public @arg String nonTerminal; } + public static @tag("literal") class StringLiteral extends El { public @arg String string; } + public static @tag("()") class Epsilon extends El { } + public static @tag("{") class Tree extends El { public @arg Seq body; } + public static class CharClass extends El { public @tag("[") CharClass(Range[] ranges) { } } - public @tag("++") void plusmax(El e) { } - public @tag("+") void plus(El e) { } - public @tag("++/") void plusmaxfollow(El e, El sep) { } - public @tag("+/") void plusfollow(El e, El sep) { } - public @tag("**") void starmax(El e) { } - public @tag("*") void star(El e) { } - public @tag("**/") void starmaxfollow(El e, El sep) { } - public @tag("*/") void starfollow(El e, El sep) { } - public @tag("!") void bang(El e) { } - public @tag("?") void question(El e) { } - public @tag("^") void caret(String s) { } - public @tag("~") void tilde(El e) { } - public @tag("^^") void doublecaret(El e) { } - public @tag("(") void subexpression(Seq[][] rhs) { } + public static @tag("++") void plusmax(El e) { } + public static @tag("+") void plus(El e) { } + public static @tag("++/") void plusmaxfollow(El e, El sep) { } + public static @tag("+/") void plusfollow(El e, El sep) { } + public static @tag("**") void starmax(El e) { } + public static @tag("*") void star(El e) { } + public static @tag("**/") void starmaxfollow(El e, El sep) { } + public static @tag("*/") void starfollow(El e, El sep) { } + public static @tag("!") void bang(El e) { } + public static @tag("?") void question(El e) { } + public static @tag("^") void caret(String s) { } + public static @tag("~") void tilde(El e) { } + public static @tag("^^") void doublecaret(El e) { } + public static @tag("(") void subexpression(Seq[][] rhs) { } - public @nonterminal("Word") String word(String s) { return null; } - public @nonterminal("Quoted") String quoted(String s) { return null; } - public @nonterminal("escaped") String c(char c) { return null; } - public @tag("\"\"") String emptystring() { return null; } - public @tag("\r") String lf() { return null; } - public @tag("\n") String cr() { return null; } + public static @nonterminal("Word") String word(String s) { return null; } + public static @nonterminal("Quoted") String quoted(String s) { return null; } + public static @nonterminal("escaped") String c(char c) { return null; } + public static @tag("\"\"") String emptystring() { return null; } + public static @tag("\r") String lf() { return null; } + public static @tag("\n") String cr() { return null; } } }