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 {