X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FRegressionTests.java;h=96c2075e7a77eabe9de055c3580d3fa99a0c2701;hp=85a526b262b7df2e9516af9d0af143860aa8a137;hb=ea6309dcafef2c5796be4c1d50c8295274dc31d6;hpb=0a0227b9180534d2a431f3d6e08a398bde2244c4 diff --git a/src/edu/berkeley/sbp/misc/RegressionTests.java b/src/edu/berkeley/sbp/misc/RegressionTests.java index 85a526b..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(); @@ -148,13 +122,12 @@ public class RegressionTests { public static class TestCaseBuilder extends MetaGrammar { public TestCase[] ts(Object o1, TestCase[] ts, Object o2) { return ts; } - public TestCase testcase(String input, String[] output, Union grammar) { return new TestCase(input, output, grammar); } + 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, 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); } }