- public static class TestCaseBuilder extends StringWalker {
- public Object walk(Tree<String> tree) {
- try {
- if ("grammar".equals(tree.head())) return MetaGrammar.make(tree, "s");
- else if ("output".equals(tree.head())) return MetaGrammar.string(tree.children());
- else if ("input".equals(tree.head())) return MetaGrammar.string(tree.children());
- else if ("testcase".equals(tree.head())) {
- String input = MetaGrammar.string(tree.child(0));
- String[] output = tree.numChildren()>2 ? ((String[])walk(tree, 1)) : new String[0];
- Union grammar = MetaGrammar.make(tree.child(tree.numChildren()-1), "s");
- TestCase tc = new TestCase(input, output, grammar, false, false);
- return tc;
- } else if ("ts".equals(tree.head())) return walk(tree, 0);
- else if (tree.head() == null) {
- Object[] ret = new Object[tree.numChildren()];
- for(int i=0; i<ret.length; i++)
- ret[i] = walk(tree.child(i));
- return Reflection.lub(ret);
- }
- return super.walk(tree);
- } catch (Exception e) {
- throw new Error(e);
- }
- }
- }