From: adam Date: Mon, 26 Feb 2007 16:36:04 +0000 (+0100) Subject: speed up separate parsing X-Git-Url: http://git.megacz.com/?p=fleet.git;a=commitdiff_plain;h=a381e6cd5ce0d1e0debc61341dbb66620e802acb speed up separate parsing --- diff --git a/lib/edu.berkeley.sbp.jar b/lib/edu.berkeley.sbp.jar index ef8ab88..f17ef18 100644 Binary files a/lib/edu.berkeley.sbp.jar and b/lib/edu.berkeley.sbp.jar differ diff --git a/src/edu/berkeley/fleet/assembler/Parser.java b/src/edu/berkeley/fleet/assembler/Parser.java index 98fbed3..39deda3 100644 --- a/src/edu/berkeley/fleet/assembler/Parser.java +++ b/src/edu/berkeley/fleet/assembler/Parser.java @@ -36,15 +36,19 @@ public class Parser { return new CodeBag(name); } - Tree 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 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 parse(Reader r) throws Exception { + return new CharParser(getGrammar()).parse(new CharInput(r)).expand1(); } public void parse(Reader r, OutputStream out) throws Exception {