X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FRegressionTests.java;h=96c2075e7a77eabe9de055c3580d3fa99a0c2701;hp=e61673aefc0e24cda20d5d5bdf7536d63dcd97b6;hb=75436cc6e44f18083d834a3c92b1e99a53e94b66;hpb=c1325de42a4ddfad3ff9b10bfdda11078e38e8a6 diff --git a/src/edu/berkeley/sbp/misc/RegressionTests.java b/src/edu/berkeley/sbp/misc/RegressionTests.java index e61673a..96c2075 100644 --- a/src/edu/berkeley/sbp/misc/RegressionTests.java +++ b/src/edu/berkeley/sbp/misc/RegressionTests.java @@ -6,37 +6,6 @@ import edu.berkeley.sbp.*; import edu.berkeley.sbp.misc.*; import edu.berkeley.sbp.*; -// priorities are all messy and dont get serialized -// 1. Error messages -// 2. Java MetaGrammar (proof of concept) -// 3. Ivan's MetaGrammar -// 4. Documentation format -// - TIB - -// TODO: better API for interfacing with Java -// TODO: error messages -// TODO: integrate with TIB - -// Element -// Walk -// ParseTable / GSS -// MetaGrammar (necessary/relevant?) -// Tree (cleanup?) -// Union.SubUnion -// Repeat - -// FEATURE: serialization of ParseTable's, generation of Java code -// FEATURE: infer reject elements for literals -// FEATURE: prefer whitespace higher up -// FEATURE: full conjunctive and boolean grammars -// FEATURE: "ambiguity modulo dropped fragments"? can this be checked for statically? eliminated statically? -// - drop stuff during the parsing process (drop nodes) - -// LATER: Element -- parameterize over the input token type? Makes a huge mess... -// LATER: Go back to where Sequence is not an Element? -// - The original motivation for making Sequence "first class" was the fact that -// in order to do associativity right you need to have per-Sequence follow sets - public class RegressionTests { public static boolean yes = false; @@ -65,8 +34,13 @@ public class RegressionTests { s = s2; } + //MetaGrammar mg0 = new MetaGrammar(); + //mg0.walk(MetaGrammar.meta); + //System.out.println(mg0); Tree res = new Parser(MetaGrammar.make(), CharToken.top()).parse1(new CharToken.Stream(new InputStreamReader(new FileInputStream(s[0])))); - Union meta = ((MetaGrammar)new MetaGrammar().walk(res)).done(); + MetaGrammar mg = (MetaGrammar)new MetaGrammar().walk(res); + //System.out.println(mg); + Union meta = mg.done(); SequenceInputStream sis = new SequenceInputStream(new FileInputStream(s[0]), new FileInputStream(s[1])); res = new Parser(meta, CharToken.top()).parse1(new CharToken.Stream(new InputStreamReader(sis), "parsing " + s[1] + " using " + s[0])); Union testcasegrammar = ((MetaGrammar)new MetaGrammar("ts").walk(res)).done("ts"); @@ -123,7 +97,7 @@ public class RegressionTests { System.out.println("\r \r"); } HashSet outs = new HashSet(); - for(String s : output) outs.add(s.trim()); + if (output != null) for(String s : output) outs.add(s.trim()); boolean bad = false; for (Tree r : results) { String s = r.toString().trim(); @@ -149,13 +123,11 @@ public class RegressionTests { public static class TestCaseBuilder extends MetaGrammar { public TestCase[] ts(Object o1, TestCase[] ts, Object o2) { return ts; } public TestCase[] ts(TestCase[] ts) { return ts; } - public TestCase testcase(String input, String[] output, Union grammar) { return new TestCase(input, output, grammar); } + public TestCase testcase(String input, String[] output, Union grammar) { return new TestCase(input, output, grammar); } + public TestCase testcase(String input, Union grammar) { return new TestCase(input, new String[0], grammar); } public MetaGrammar grammar(Object[] o) { return this; } public Object walk(String tag, Object[] args) { - if ("testcase".equals(tag)) { - if (args.length==2) return testcase((String)args[0], new String[0], (Union)args[1]); - return testcase((String)args[0], (String[])args[1], (Union)args[2]); } - else if ("grammar".equals(tag)) return done("s"); + if ("grammar".equals(tag)) return done("s"); else return super.walk(tag, args); } }