List of usage examples for org.antlr.v4.runtime CommonTokenStream CommonTokenStream
public CommonTokenStream(TokenSource tokenSource)
From source file:com.eprosima.fastrtps.fastrtpsgen.java
License:Apache License
private Project parseIDL(String idlFilename) { boolean returnedValue = false; String idlParseFileName = idlFilename; Project project = null;//from w w w . java2 s . c om String onlyFileName = Util.getIDLFileNameOnly(idlFilename); if (!m_ppDisable) { idlParseFileName = callPreprocessor(idlFilename); } if (idlParseFileName != null) { Context ctx = new Context(onlyFileName, idlFilename, m_includePaths, m_subscribercode, m_publishercode, m_localAppProduct); if (fusion_) ctx.setActivateFusion(true); // Create default @Key annotation. AnnotationDeclaration keyann = ctx.createAnnotationDeclaration("Key", null); keyann.addMember(new AnnotationMember("value", new PrimitiveTypeCode(TypeCode.KIND_BOOLEAN), "true")); // Create default @Topic annotation. AnnotationDeclaration topicann = ctx.createAnnotationDeclaration("Topic", null); topicann.addMember(new AnnotationMember("value", new PrimitiveTypeCode(TypeCode.KIND_BOOLEAN), "true")); // Create template manager TemplateManager tmanager = new TemplateManager("FastCdrCommon:eprosima:Common"); List<TemplateExtension> extensions = new ArrayList<TemplateExtension>(); // Load common types template extensions.add(new TemplateExtension("struct_type", "keyFunctionHeadersStruct")); extensions.add(new TemplateExtension("union_type", "keyFunctionHeadersUnion")); tmanager.addGroup("TypesHeader", extensions); extensions.clear(); extensions.add(new TemplateExtension("struct_type", "keyFunctionSourcesStruct")); tmanager.addGroup("TypesSource", extensions); // TODO: Uncomment following lines and create templates // Load Types common templates tmanager.addGroup("RTPSPubSubTypeHeader"); tmanager.addGroup("RTPSPubSubTypeSource"); // Load Publisher templates tmanager.addGroup("RTPSPublisherHeader"); tmanager.addGroup("RTPSPublisherSource"); // Load Subscriber templates tmanager.addGroup("RTPSSubscriberHeader"); tmanager.addGroup("RTPSSubscriberSource"); // Load PubSubMain template tmanager.addGroup("RTPSPubSubMain"); // Add JNI sources. if (m_languageOption == LANGUAGE.JAVA) { tmanager.addGroup("JNIHeader"); tmanager.addGroup("JNISource"); tmanager.addGroup("JavaSource"); // Set package in context. ctx.setPackage(m_package); } // Create main template TemplateGroup maintemplates = tmanager.createTemplateGroup("main"); maintemplates.setAttribute("ctx", ctx); try { ANTLRFileStream input = new ANTLRFileStream(idlParseFileName); IDLLexer lexer = new IDLLexer(input); lexer.setContext(ctx); CommonTokenStream tokens = new CommonTokenStream(lexer); IDLParser parser = new IDLParser(tokens); // Pass the finelame without the extension Specification specification = parser.specification(ctx, tmanager, maintemplates).spec; returnedValue = specification != null; } catch (FileNotFoundException ex) { System.out.println(ColorMessage.error("FileNotFounException") + "The File " + idlParseFileName + " was not found."); } /* catch (ParseException ex) { System.out.println(ColorMessage.error("ParseException") + ex.getMessage()); }*/ catch (Exception ex) { System.out.println(ColorMessage.error("Exception") + ex.getMessage()); } if (returnedValue) { // Create information of project for solution project = new Project(onlyFileName, idlFilename, ctx.getDependencies()); System.out.println("Generating Type definition files..."); if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + ".h", maintemplates.getTemplate("TypesHeader"), m_replace)) { if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + ".cxx", maintemplates.getTemplate("TypesSource"), m_replace)) { project.addCommonIncludeFile(onlyFileName + ".h"); project.addCommonSrcFile(onlyFileName + ".cxx"); } } // TODO: Uncomment following lines and create templates if (ctx.existsLastStructure()) { m_atLeastOneStructure = true; project.setHasStruct(true); System.out.println("Generating TopicDataTypes files..."); if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "PubSubTypes.h", maintemplates.getTemplate("RTPSPubSubTypeHeader"), m_replace)) { if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "PubSubTypes.cxx", maintemplates.getTemplate("RTPSPubSubTypeSource"), m_replace)) { project.addProjectIncludeFile(onlyFileName + "PubSubTypes.h"); project.addProjectSrcFile(onlyFileName + "PubSubTypes.cxx"); } } if (m_exampleOption != null) { System.out.println("Generating Publisher files..."); if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "Publisher.h", maintemplates.getTemplate("RTPSPublisherHeader"), m_replace)) { if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "Publisher.cxx", maintemplates.getTemplate("RTPSPublisherSource"), m_replace)) { project.addProjectIncludeFile(onlyFileName + "Publisher.h"); project.addProjectSrcFile(onlyFileName + "Publisher.cxx"); } } System.out.println("Generating Subscriber files..."); if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "Subscriber.h", maintemplates.getTemplate("RTPSSubscriberHeader"), m_replace)) { if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "Subscriber.cxx", maintemplates.getTemplate("RTPSSubscriberSource"), m_replace)) { project.addProjectIncludeFile(onlyFileName + "Subscriber.h"); project.addProjectSrcFile(onlyFileName + "Subscriber.cxx"); } } System.out.println("Generating main file..."); if (returnedValue = Utils.writeFile(m_outputDir + onlyFileName + "PubSubMain.cxx", maintemplates.getTemplate("RTPSPubSubMain"), m_replace)) { project.addProjectSrcFile(onlyFileName + "PubSubMain.cxx"); } } } } // Java support (Java classes and JNI code) if (returnedValue && m_languageOption == LANGUAGE.JAVA) { String outputDir = m_outputDir; // Make directories from package. if (!m_package.isEmpty()) { outputDir = m_outputDir + File.separator + m_package.replace('.', File.separatorChar); File dirs = new File(outputDir); if (!dirs.exists()) { if (!dirs.mkdirs()) { System.out .println(ColorMessage.error() + "Cannot create directories for Java packages."); return null; } } } // Java classes. TypesGenerator typeGen = new TypesGenerator(tmanager, m_outputDir, m_replace); TypeCode.javapackage = m_package + (m_package.isEmpty() ? "" : "."); if (!typeGen.generate(ctx, outputDir + File.separator, m_package, onlyFileName, null)) { System.out.println(ColorMessage.error() + "generating Java types"); return null; } if (ctx.existsLastStructure()) { System.out.println("Generando fichero " + m_outputDir + onlyFileName + "PubSub.java"); if (!Utils.writeFile(outputDir + File.separator + onlyFileName + "PubSub.java", maintemplates.getTemplate("JavaSource"), m_replace)) return null; // Call javah application for each structure. if (!callJavah(idlFilename)) return null; } if (Utils.writeFile(m_outputDir + onlyFileName + "PubSubJNII.h", maintemplates.getTemplate("JNIHeader"), m_replace)) project.addJniIncludeFile(onlyFileName + "PubSubJNII.h"); else return null; StringTemplate jnisourceTemplate = maintemplates.getTemplate("JNISource"); if (Utils.writeFile(m_outputDir + onlyFileName + "PubSubJNI.cxx", jnisourceTemplate, m_replace)) project.addJniSrcFile(onlyFileName + "PubSubJNI.cxx"); else return null; } } return returnedValue ? project : null; }
From source file:com.espertech.esper.core.deploy.EPLModuleUtil.java
License:Open Source License
public static ParseNode getModule(EPLModuleParseItem item, String resourceName) throws ParseException, IOException { CharStream input = new NoCaseSensitiveStream(new StringReader(item.getExpression())); EsperEPL2GrammarLexer lex = ParseHelper.newLexer(input); CommonTokenStream tokenStream = new CommonTokenStream(lex); tokenStream.fill();//from ww w . j a v a 2s . c o m List tokens = tokenStream.getTokens(); int beginIndex = 0; boolean isMeta = false; boolean isModule = false; boolean isUses = false; boolean isExpression = false; while (beginIndex < tokens.size()) { Token t = (Token) tokens.get(beginIndex); if (t.getType() == EsperEPL2GrammarParser.EOF) { break; } if ((t.getType() == EsperEPL2GrammarParser.WS) || (t.getType() == EsperEPL2GrammarParser.SL_COMMENT) || (t.getType() == EsperEPL2GrammarParser.ML_COMMENT)) { beginIndex++; continue; } String tokenText = t.getText().trim().toLowerCase(); if (tokenText.equals("module")) { isModule = true; isMeta = true; } else if (tokenText.equals("uses")) { isUses = true; isMeta = true; } else if (tokenText.equals("import")) { isMeta = true; } else { isExpression = true; break; } beginIndex++; beginIndex++; // skip space break; } if (isExpression) { return new ParseNodeExpression(item); } if (!isMeta) { return new ParseNodeComment(item); } // check meta tag (module, uses, import) StringWriter buffer = new StringWriter(); for (int i = beginIndex; i < tokens.size(); i++) { Token t = (Token) tokens.get(i); if (t.getType() == EsperEPL2GrammarParser.EOF) { break; } if ((t.getType() != EsperEPL2GrammarParser.IDENT) && (t.getType() != EsperEPL2GrammarParser.DOT) && (t.getType() != EsperEPL2GrammarParser.STAR) && (!t.getText().matches("[a-zA-Z]*"))) { throw getMessage(isModule, isUses, resourceName, t.getType()); } buffer.append(t.getText().trim()); } String result = buffer.toString().trim(); if (result.length() == 0) { throw getMessage(isModule, isUses, resourceName, -1); } if (isModule) { return new ParseNodeModule(item, result); } else if (isUses) { return new ParseNodeUses(item, result); } return new ParseNodeImport(item, result); }
From source file:com.espertech.esper.core.deploy.EPLModuleUtil.java
License:Open Source License
public static List<EPLModuleParseItem> parse(String module) throws ParseException { CharStream input;//w ww.j a va2 s. co m try { input = new NoCaseSensitiveStream(new StringReader(module)); } catch (IOException ex) { log.error("Exception reading module expression: " + ex.getMessage(), ex); return null; } EsperEPL2GrammarLexer lex = ParseHelper.newLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); try { tokens.fill(); } catch (RuntimeException ex) { String message = "Unexpected exception recognizing module text"; if (ex instanceof LexerNoViableAltException) { if (ParseHelper.hasControlCharacters(module)) { message = "Unrecognized control characters found in text, failed to parse text"; } else { message += ", recognition failed for " + ex.toString(); } } else if (ex instanceof RecognitionException) { RecognitionException recog = (RecognitionException) ex; message += ", recognition failed for " + recog.toString(); } else if (ex.getMessage() != null) { message += ": " + ex.getMessage(); } message += " [" + module + "]"; log.error(message, ex); throw new ParseException(message); } List<EPLModuleParseItem> statements = new ArrayList<EPLModuleParseItem>(); StringWriter current = new StringWriter(); Integer lineNum = null; int charPosStart = 0; int charPos = 0; List<Token> tokenList = tokens.getTokens(); Set<Integer> skippedSemicolonIndexes = getSkippedSemicolons(tokenList); int index = -1; for (Object token : tokenList) // Call getTokens first before invoking tokens.size! ANTLR problem { index++; Token t = (Token) token; boolean semi = t.getType() == EsperEPL2GrammarLexer.SEMI && !skippedSemicolonIndexes.contains(index); if (semi) { if (current.toString().trim().length() > 0) { statements.add(new EPLModuleParseItem(current.toString().trim(), lineNum == null ? 0 : lineNum, charPosStart, charPos)); lineNum = null; } current = new StringWriter(); } else { if ((lineNum == null) && (t.getType() != EsperEPL2GrammarParser.WS)) { lineNum = t.getLine(); charPosStart = charPos; } if (t.getType() != EsperEPL2GrammarLexer.EOF) { current.append(t.getText()); charPos += t.getText().length(); } } } if (current.toString().trim().length() > 0) { statements.add(new EPLModuleParseItem(current.toString().trim(), lineNum == null ? 0 : lineNum, 0, 0)); } return statements; }
From source file:com.espertech.esper.epl.db.DatabasePollingViewableFactory.java
License:Open Source License
/** * Lexes the sample SQL and inserts a "where 1=0" where-clause. * @param querySQL to inspect using lexer * @return sample SQL with where-clause inserted * @throws ExprValidationException to indicate a lexer problem *///from w w w . j a va2 s .c om protected static String lexSampleSQL(String querySQL) throws ExprValidationException { querySQL = querySQL.replaceAll("\\s\\s+|\\n|\\r", " "); StringReader reader = new StringReader(querySQL); CharStream input; try { input = new NoCaseSensitiveStream(reader); } catch (IOException ex) { throw new ExprValidationException("IOException lexing query SQL '" + querySQL + '\'', ex); } int whereIndex = -1; int groupbyIndex = -1; int havingIndex = -1; int orderByIndex = -1; List<Integer> unionIndexes = new ArrayList<Integer>(); EsperEPL2GrammarLexer lex = ParseHelper.newLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); tokens.fill(); List tokenList = tokens.getTokens(); for (int i = 0; i < tokenList.size(); i++) { Token token = (Token) tokenList.get(i); if ((token == null) || token.getText() == null) { break; } String text = token.getText().toLowerCase().trim(); if (text.equals("where")) { whereIndex = token.getCharPositionInLine() + 1; } if (text.equals("group")) { groupbyIndex = token.getCharPositionInLine() + 1; } if (text.equals("having")) { havingIndex = token.getCharPositionInLine() + 1; } if (text.equals("order")) { orderByIndex = token.getCharPositionInLine() + 1; } if (text.equals("union")) { unionIndexes.add(token.getCharPositionInLine() + 1); } } // If we have a union, break string into subselects and process each if (unionIndexes.size() != 0) { StringWriter changedSQL = new StringWriter(); int lastIndex = 0; for (int i = 0; i < unionIndexes.size(); i++) { int index = unionIndexes.get(i); String fragment; if (i > 0) { fragment = querySQL.substring(lastIndex + 5, index - 1); } else { fragment = querySQL.substring(lastIndex, index - 1); } String lexedFragment = lexSampleSQL(fragment); if (i > 0) { changedSQL.append("union "); } changedSQL.append(lexedFragment); lastIndex = index - 1; } // last part after last union String fragment = querySQL.substring(lastIndex + 5, querySQL.length()); String lexedFragment = lexSampleSQL(fragment); changedSQL.append("union "); changedSQL.append(lexedFragment); return changedSQL.toString(); } // Found a where clause, simplest cases if (whereIndex != -1) { StringWriter changedSQL = new StringWriter(); String prefix = querySQL.substring(0, whereIndex + 5); String suffix = querySQL.substring(whereIndex + 5, querySQL.length()); changedSQL.write(prefix); changedSQL.write("1=0 and "); changedSQL.write(suffix); return changedSQL.toString(); } // No where clause, find group-by int insertIndex; if (groupbyIndex != -1) { insertIndex = groupbyIndex; } else if (havingIndex != -1) { insertIndex = havingIndex; } else if (orderByIndex != -1) { insertIndex = orderByIndex; } else { StringWriter changedSQL = new StringWriter(); changedSQL.write(querySQL); changedSQL.write(" where 1=0 "); return changedSQL.toString(); } try { StringWriter changedSQL = new StringWriter(); String prefix = querySQL.substring(0, insertIndex - 1); changedSQL.write(prefix); changedSQL.write("where 1=0 "); String suffix = querySQL.substring(insertIndex - 1, querySQL.length()); changedSQL.write(suffix); return changedSQL.toString(); } catch (Exception ex) { String text = "Error constructing sample SQL to retrieve metadata for JDBC-drivers that don't support metadata, consider using the " + SAMPLE_WHERECLAUSE_PLACEHOLDER + " placeholder or providing a sample SQL"; log.error(text, ex); throw new ExprValidationException(text, ex); } }
From source file:com.espertech.esper.epl.parse.ParseHelper.java
License:Open Source License
/** * Parse expression using the rule the ParseRuleSelector instance supplies. * * @param expression - text to parse * @param parseRuleSelector - parse rule to select * @param addPleaseCheck - true to include depth paraphrase * @param eplStatementErrorMsg - text for error * @return AST - syntax tree/*w w w .j av a 2 s.co m*/ * @throws EPException when the AST could not be parsed */ public static ParseResult parse(String expression, String eplStatementErrorMsg, boolean addPleaseCheck, ParseRuleSelector parseRuleSelector, boolean rewriteScript) throws EPException { if (log.isDebugEnabled()) { log.debug(".parse Parsing expr=" + expression); } CharStream input; try { input = new NoCaseSensitiveStream(new StringReader(expression)); } catch (IOException ex) { throw new EPException("IOException parsing expression '" + expression + '\'', ex); } EsperEPL2GrammarLexer lex = newLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); EsperEPL2GrammarParser parser = ParseHelper.newParser(tokens); Tree tree; try { tree = parseRuleSelector.invokeParseRule(parser); } catch (RecognitionException ex) { tokens.fill(); if (rewriteScript && isContainsScriptExpression(tokens)) { return handleScriptRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } log.debug("Error parsing statement [" + expression + "]", ex); throw ExceptionConvertor.convertStatement(ex, eplStatementErrorMsg, addPleaseCheck, parser); } catch (RuntimeException e) { try { tokens.fill(); } catch (RuntimeException ex) { log.debug("Token-fill produced exception: " + e.getMessage(), e); } if (log.isDebugEnabled()) { log.debug("Error parsing statement [" + eplStatementErrorMsg + "]", e); } if (e.getCause() instanceof RecognitionException) { if (rewriteScript && isContainsScriptExpression(tokens)) { return handleScriptRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } throw ExceptionConvertor.convertStatement((RecognitionException) e.getCause(), eplStatementErrorMsg, addPleaseCheck, parser); } else { throw e; } } // if we are re-writing scripts and contain a script, then rewrite if (rewriteScript && isContainsScriptExpression(tokens)) { return handleScriptRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } if (log.isDebugEnabled()) { log.debug(".parse Dumping AST..."); ASTUtil.dumpAST(tree); } String expressionWithoutAnnotation = expression; if (tree instanceof EsperEPL2GrammarParser.StartEPLExpressionRuleContext) { EsperEPL2GrammarParser.StartEPLExpressionRuleContext epl = (EsperEPL2GrammarParser.StartEPLExpressionRuleContext) tree; expressionWithoutAnnotation = getNoAnnotation(expression, epl.annotationEnum(), tokens); } else if (tree instanceof EsperEPL2GrammarParser.StartPatternExpressionRuleContext) { EsperEPL2GrammarParser.StartPatternExpressionRuleContext pattern = (EsperEPL2GrammarParser.StartPatternExpressionRuleContext) tree; expressionWithoutAnnotation = getNoAnnotation(expression, pattern.annotationEnum(), tokens); } return new ParseResult(tree, expressionWithoutAnnotation, tokens, Collections.<String>emptyList()); }
From source file:com.espertech.esper.event.property.PropertyParser.java
License:Open Source License
/** * Parses a given property name returning an AST. * @param propertyName to parse//from w ww.j a v a 2 s . c om * @return AST syntax tree */ public static EsperEPL2GrammarParser.StartEventPropertyRuleContext parse(String propertyName) { CharStream input; try { input = new NoCaseSensitiveStream(new StringReader(propertyName)); } catch (IOException ex) { throw new PropertyAccessException("IOException parsing property name '" + propertyName + '\'', ex); } EsperEPL2GrammarLexer lex = ParseHelper.newLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); try { tokens.fill(); } catch (RuntimeException e) { if (ParseHelper.hasControlCharacters(propertyName)) { throw new PropertyAccessException("Unrecognized control characters found in text"); } throw new PropertyAccessException("Failed to parse text: " + e.getMessage()); } EsperEPL2GrammarParser g = ParseHelper.newParser(tokens); EsperEPL2GrammarParser.StartEventPropertyRuleContext r; try { r = g.startEventPropertyRule(); } catch (RecognitionException e) { return handleRecognitionEx(e, tokens, propertyName, g); } catch (RuntimeException e) { if (log.isDebugEnabled()) { log.debug("Error parsing property expression [" + propertyName + "]", e); } if (e.getCause() instanceof RecognitionException) { return handleRecognitionEx((RecognitionException) e.getCause(), tokens, propertyName, g); } else { throw e; } } return r; }
From source file:com.espertech.esper.event.property.PropertyParser.java
License:Open Source License
private static EsperEPL2GrammarParser.StartEventPropertyRuleContext handleRecognitionEx(RecognitionException e, CommonTokenStream tokens, String propertyName, EsperEPL2GrammarParser g) { // Check for keywords and escape each, parse again String escapedPropertyName = escapeKeywords(tokens); CharStream inputEscaped;//www.ja va 2s . c om try { inputEscaped = new NoCaseSensitiveStream(new StringReader(escapedPropertyName)); } catch (IOException ex) { throw new PropertyAccessException("IOException parsing property name '" + propertyName + '\'', ex); } EsperEPL2GrammarLexer lexEscaped = ParseHelper.newLexer(inputEscaped); CommonTokenStream tokensEscaped = new CommonTokenStream(lexEscaped); EsperEPL2GrammarParser gEscaped = ParseHelper.newParser(tokensEscaped); try { return gEscaped.startEventPropertyRule(); } catch (Exception eEscaped) { } throw ExceptionConvertor.convertProperty(e, propertyName, true, g); }
From source file:com.espertech.esper.support.epl.parse.SupportParserHelper.java
License:Open Source License
public static Pair<Tree, CommonTokenStream> parse(ParseRuleSelector parseRuleSelector, String text) throws Exception { CharStream input;// w w w . ja va2 s .c o m try { input = new NoCaseSensitiveStream(new StringReader(text)); } catch (IOException ex) { throw new RuntimeException("IOException parsing text '" + text + '\'', ex); } EsperEPL2GrammarLexer lex = ParseHelper.newLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); EsperEPL2GrammarParser g = ParseHelper.newParser(tokens); Tree ctx = parseRuleSelector.invokeParseRule(g); return new Pair<Tree, CommonTokenStream>(ctx, tokens); }
From source file:com.facebook.presto.type.TypeCalculation.java
License:Apache License
private static ParserRuleContext parseTypeCalculation(String calculation) { TypeCalculationLexer lexer = new TypeCalculationLexer( new CaseInsensitiveStream(new ANTLRInputStream(calculation))); CommonTokenStream tokenStream = new CommonTokenStream(lexer); TypeCalculationParser parser = new TypeCalculationParser(tokenStream); lexer.removeErrorListeners();/*from ww w . j av a2 s.c o m*/ lexer.addErrorListener(ERROR_LISTENER); parser.removeErrorListeners(); parser.addErrorListener(ERROR_LISTENER); ParserRuleContext tree; try { // first, try parsing with potentially faster SLL mode parser.getInterpreter().setPredictionMode(PredictionMode.SLL); tree = parser.typeCalculation(); } catch (ParseCancellationException ex) { // if we fail, parse with LL mode tokenStream.reset(); // rewind input stream parser.reset(); parser.getInterpreter().setPredictionMode(PredictionMode.LL); tree = parser.typeCalculation(); } return tree; }
From source file:com.fizzed.rocker.compiler.TemplateParser.java
License:Apache License
private TemplateModel parse(ANTLRInputStream input, String packageName, String templateName, long modifiedAt) throws ParserException { // construct path for more helpful error messages String templatePath = packageName.replace(".", File.separator) + "/" + templateName; // get our lexer log.trace("Lexer for input stream"); RockerLexer lexer = new RockerLexer(input); lexer.removeErrorListeners();/* w w w. ja v a2 s . com*/ lexer.addErrorListener(new DescriptiveErrorListener()); // // lexer // CommonTokenStream tokens = null; try { // get a list of matched tokens log.trace("Tokenizing lexer"); tokens = new CommonTokenStream(lexer); } catch (ParserRuntimeException e) { throw unwrapParserRuntimeException(templatePath, e); } if (log.isTraceEnabled()) { // just for debugging lexer tokens.fill(); for (Token token : tokens.getTokens()) { log.trace("{}", token); } } // // parser & new model // try { // pass the tokens to the parser log.trace("Parsing tokens"); RockerParser parser = new RockerParser(tokens); parser.removeErrorListeners(); parser.addErrorListener(new DescriptiveErrorListener()); TemplateModel model = new TemplateModel(packageName, templateName, modifiedAt, configuration.getOptions().copy()); // walk it and attach our listener TemplateParserListener listener = new TemplateParserListener(input, model, templatePath); ParseTreeWalker walker = new ParseTreeWalker(); log.trace("Walking parse tree"); walker.walk(listener, parser.template()); if (model.getOptions().getCombineAdjacentPlain()) { combineAdjacentPlain(model); } // discard whitespace either globally or template-set or also fallsback // to the default per content-type if (model.getOptions().getDiscardLogicWhitespaceForContentType(model.getContentType())) { discardLogicWhitespace(model); } return model; } catch (ParserRuntimeException e) { throw unwrapParserRuntimeException(templatePath, e); } }