/** * create code generation pipeline from grammar ast * * @param ast grammar ast * @return string code generation pipeline */ public StringCodeGenPipeline createPipeline(GrammarRootAST ast) { if (pip.containsKey(ast.getGrammarName())) pip.get(ast.getGrammarName()); LOGGER.debug("create grammar {}", ast.getGrammarName()); final Grammar g = createGrammar(ast); g.fileName = g.name; g.loadImportedGrammars(); StringCodeGenPipeline spip = new StringCodeGenPipeline(g); LOGGER.debug("put grammar {}", g.name); pip.put(g.name, spip); return spip; }
@Override public Grammar createGrammar(GrammarRootAST ast) { final Grammar g; LOGGER.debug("ast " + ast.getGrammarName()); if (ast.grammarType == ANTLRParser.LEXER) { g = new InmemantlrLexerGrammar(this, ast); } else { g = new InmemantlrGrammar(this, ast); } // ensure each node has pointer to surrounding grammar GrammarTransformPipeline.setGrammarPtr(g, ast); return g; }
/** * initialize the generic parser * * @param gcontent content of grammar files * @param tlc tool customizer */ private void init(Set<String> gcontent, ToolCustomizer tlc) { if (tlc != null) { tlc.customize(antlr); } Set<GrammarRootAST> ast = antlr.sortGrammarByTokenVocab(gcontent); for (GrammarRootAST gast : ast) { LOGGER.debug("gast {}", gast.getGrammarName()); antlr.createPipeline(gast); } }
for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if ( root.getGrammarName().equals(grammarName) ) { sortedRoots.add(root); break;
root.fileName = root.getGrammarName(); for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if (root.getGrammarName().equals(grammarName)) { LOGGER.debug("add to ast buffer {}", grammarName); ast.put(grammarName, root);
for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if ( root.getGrammarName().equals(grammarName) ) { sortedRoots.add(root); break;
for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if ( root.getGrammarName().equals(grammarName) ) { sortedRoots.add(root); break;
for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if ( root.getGrammarName().equals(grammarName) ) { sortedRoots.add(root); break;
for (String grammarName : sortedGrammarNames) { for (GrammarRootAST root : roots) { if ( root.getGrammarName().equals(grammarName) ) { sortedRoots.add(root); break;
importedGrammars.put(root.getGrammarName(), imported);
importedGrammars.put(root.getGrammarName(), imported);
importedGrammars.put(root.getGrammarName(), imported);
importedGrammars.put(root.getGrammarName(), imported);
importedGrammars.put(root.getGrammarName(), imported);