speed up separate parsing
authoradam <adam@megacz.com>
Mon, 26 Feb 2007 16:36:04 +0000 (17:36 +0100)
committeradam <adam@megacz.com>
Mon, 26 Feb 2007 16:36:04 +0000 (17:36 +0100)
lib/edu.berkeley.sbp.jar
src/edu/berkeley/fleet/assembler/Parser.java

index ef8ab88..f17ef18 100644 (file)
Binary files a/lib/edu.berkeley.sbp.jar and b/lib/edu.berkeley.sbp.jar differ
index 98fbed3..39deda3 100644 (file)
@@ -36,15 +36,19 @@ public class Parser {
         return new CodeBag(name);
     }
 
-    Tree<String> parse(Reader r) throws Exception {
+    private static Union grammar;
+    private static synchronized Union getGrammar() throws Exception {
+        if (grammar != null) return grammar;
         InputStream grammarStream =
             Parser.class.getClassLoader().getResourceAsStream("edu/berkeley/fleet/assembler/fleet.g");
         CharParser metaGrammarParser   = new CharParser(MetaGrammar.newInstance());
         Tree<String> parsedGrammar     = metaGrammarParser.parse(new CharInput(grammarStream)).expand1();
-        Union   grammar                = Grammar.create(parsedGrammar, "s", new Grammar.Bindings() { });
-        CharParser  parser             = new CharParser(grammar);
-        Tree tree = parser.parse(new CharInput(r)).expand1();
-        return tree;
+        grammar                = Grammar.create(parsedGrammar, "s", new Grammar.Bindings() { public Object repeatTag() { return ""; } });
+        return grammar;
+    }
+
+    Tree<String> parse(Reader r) throws Exception {
+        return new CharParser(getGrammar()).parse(new CharInput(r)).expand1();
     }
 
     public void parse(Reader r, OutputStream out) throws Exception {