From bbb16d2522ed587238fd7a69e346d5e5e8f2551a Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 9 Jun 2008 13:53:45 -0400 Subject: [PATCH] preliminary support for serialization of parse tables darcs-hash:20080609175345-5007d-9c0cea946a51de13b9f1d073bbf9d146273d1aeb.gz --- src/edu/berkeley/sbp/Sequence.java | 17 +++++++++++------ src/edu/berkeley/sbp/misc/RegressionTests.java | 11 ++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index 430f298..d0c3dfd 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -10,9 +10,9 @@ import java.lang.reflect.*; import java.lang.ref.*; /** juxtaposition; zero or more adjacent Elements; can specify a rewriting */ -public abstract class Sequence implements Iterable, SequenceOrElement { +public abstract class Sequence implements Iterable, SequenceOrElement, Serializable { - protected final Element[] elements; + protected transient final Element[] elements; boolean needed_or_hated = false; boolean in_a_union = false; @@ -26,7 +26,7 @@ public abstract class Sequence implements Iterable, SequenceOrElement { final Position firstp; - Atom follow = null; + transient Atom follow = null; private static int global_sernum = 0; private int sernum = global_sernum++; @@ -137,7 +137,7 @@ public abstract class Sequence implements Iterable, SequenceOrElement { static abstract class Pos implements IntegerMappable, Comparable, Serializable { public int ord = -1; - private transient Sequence owner; + private Sequence owner; public int ord() { return ord; } @@ -223,8 +223,12 @@ public abstract class Sequence implements Iterable, SequenceOrElement { public final Forest rewrite(Input.Region loc) { if (isFirst()) return owner().epsilonForm(loc); for(int i=0; i, SequenceOrElement { public Forest postReduce(Input.Region loc, Forest[] args, Position p) { return args[idx]; } Sequence _clone() { return new Singleton(elements,idx); } Forest epsilonForm(Input.Region loc) { + if (elements==null) return new Forest.Many(); /* FIXME */ return ((Union)elements[idx]).epsilonForm(loc); } } diff --git a/src/edu/berkeley/sbp/misc/RegressionTests.java b/src/edu/berkeley/sbp/misc/RegressionTests.java index d85630e..dfe30b6 100644 --- a/src/edu/berkeley/sbp/misc/RegressionTests.java +++ b/src/edu/berkeley/sbp/misc/RegressionTests.java @@ -43,18 +43,22 @@ public class RegressionTests { s = s2; } + CharParser cp; + Tree res; + InputStream metaGrammarStream = s[0] == null ? RegressionTests.class.getClassLoader().getResourceAsStream("edu/berkeley/sbp/meta/meta.g") : new FileInputStream(s[0]); - Tree res = new CharParser(GrammarAST.getMetaGrammar()).parse(metaGrammarStream).expand1(); + res = new CharParser(GrammarAST.getMetaGrammar()).parse(metaGrammarStream).expand1(); Union meta = GrammarAST.buildFromAST(res, "s", resolver); - CharParser cp = new CharParser(meta); + cp = new CharParser(meta); System.err.println("serializing grammar to grammar.ser..."); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("grammar.ser")); oos.writeObject(cp); oos.close(); + System.err.println("deserializing grammar from grammar.ser..."); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("grammar.ser")); cp = (CharParser)ois.readObject(); @@ -62,9 +66,6 @@ public class RegressionTests { System.err.println("parsing " + s[1]); res = new CharParser(meta).parse(new FileInputStream(s[1])).expand1(); - - // uncomment this when I get serialization working - //res = cp.parse(new FileInputStream(s[1])).expand1(); Union testcasegrammar = GrammarAST.buildFromAST(res, "s", resolver); if (testcasegrammar==null) return; -- 1.7.10.4