List of usage examples for org.antlr.v4.runtime.tree ParseTreeListener ParseTreeListener
ParseTreeListener
From source file:android.databinding.tool.ExpressionParser.java
License:Apache License
public Expr parse(String input, @Nullable Location locationInFile) { ANTLRInputStream inputStream = new ANTLRInputStream(input); BindingExpressionLexer lexer = new BindingExpressionLexer(inputStream); CommonTokenStream tokenStream = new CommonTokenStream(lexer); final BindingExpressionParser parser = new BindingExpressionParser(tokenStream); BindingExpressionParser.BindingSyntaxContext root = parser.bindingSyntax(); try {//from w w w . java 2 s.c o m mModel.setCurrentLocationInFile(locationInFile); visitor.setParseTreeListener(new ParseTreeListener() { List<ParserRuleContext> mStack = new ArrayList<ParserRuleContext>(); @Override public void visitTerminal(TerminalNode node) { } @Override public void visitErrorNode(ErrorNode node) { } @Override public void enterEveryRule(ParserRuleContext ctx) { mStack.add(ctx); mModel.setCurrentParserContext(ctx); } @Override public void exitEveryRule(ParserRuleContext ctx) { Preconditions.check(ctx == mStack.get(mStack.size() - 1), "Inconsistent exit from context. Received %s, expecting %s", ctx.toInfoString(parser), mStack.get(mStack.size() - 1).toInfoString(parser)); mStack.remove(mStack.size() - 1); if (mStack.size() > 0) { mModel.setCurrentParserContext(mStack.get(mStack.size() - 1)); } else { mModel.setCurrentParserContext(null); } } }); return root.accept(visitor); } finally { mModel.setCurrentLocationInFile(null); } }
From source file:ch.raffael.contracts.devtools.ast.AstInspector.java
License:Apache License
public void parse(final String source) { final StringBuilder errors = new StringBuilder(); final StringBuilder trace = new StringBuilder("Log:\n"); ANTLRErrorListener errorListener = new BaseErrorListener() { @Override//from www. j a v a2 s . c om public void syntaxError(Recognizer<?, ?> recognizer, @Nullable Object offendingSymbol, int line, int charPositionInLine, String msg, @Nullable RecognitionException e) { errors.append("Line ").append(line).append(':').append(charPositionInLine).append(": ").append(msg) .append('\n'); } }; final CelLexer lexer = new CelLexer(new ANTLRInputStream(source)); final CelParser parser = new CelParser(new CommonTokenStream(lexer)); lexer.addErrorListener(errorListener); parser.addErrorListener(errorListener); parser.addParseListener(new ParseTreeListener() { @Override public void enterEveryRule(ParserRuleContext ctx) { trace.append(" enter\t").append(parser.getRuleNames()[ctx.getRuleIndex()]).append(", LT(1)=") .append(parser.getTokenStream().LT(1).getText()).append('\n'); } @Override public void visitTerminal(TerminalNode node) { trace.append(" consume\t").append(node.getSymbol()).append(" rule ") .append(parser.getRuleNames()[parser.getContext().getRuleIndex()]).append('\n'); } @Override public void visitErrorNode(ErrorNode node) { } @Override public void exitEveryRule(ParserRuleContext ctx) { trace.append(" exit\t").append(parser.getRuleNames()[ctx.getRuleIndex()]).append(", LT(1)=") .append(parser.getTokenStream().LT(1).getText()).append('\n'); } }); parser.setBuildParseTree(true); AstBuilder builder = new AstBuilder(); builder.install(parser); final CelParser.ClauseContext rootContext = parser.clause(); if (errors.length() != 0) { errors.append('\n'); } Runnable guiUpdate = new Runnable() { @Override public void run() { log.setText(errors.toString() + trace.toString()); log.setSelectionStart(0); log.setSelectionEnd(0); if (rootContext == null || rootContext.node == null) { syntaxTree.setModel(new DefaultTreeModel(AstTreeNode.empty())); updateParseTree(null); } else { syntaxTree.setModel(new DefaultTreeModel(AstTreeNode.from(rootContext.node))); updateParseTree(new TreeViewer(Arrays.asList(parser.getRuleNames()), rootContext)); } for (int i = 0; i < syntaxTree.getRowCount(); i++) { syntaxTree.expandRow(i); } } }; if (SwingUtilities.isEventDispatchThread()) { guiUpdate.run(); } else { SwingUtilities.invokeLater(guiUpdate); } }
From source file:org.tvl.goworks.editor.go.semantics.AnnotatedParseTree.java
License:Open Source License
public void compactAnnotations() { final Map<Tree, Tree> map = new IdentityHashMap<>(); ParseTreeListener listener = new ParseTreeListener() { @Override//from w ww . j a va 2 s.c o m public void enterEveryRule(ParserRuleContext ctx) { map.put(ctx, ctx); } @Override public void visitTerminal(TerminalNode node) { map.put(node, node); } @Override public void visitErrorNode(ErrorNode node) { map.put(node, node); } @Override public void exitEveryRule(ParserRuleContext ctx) { } }; final Map<Tree, Tree> extras = new IdentityHashMap<>(); ParseTreeWalker.DEFAULT.walk(listener, parseTree); for (Map.Entry<? extends Tree, ?> entry : treeAnnotations.getProperties().entrySet()) { if (!map.containsKey(entry.getKey())) { extras.put(entry.getKey(), entry.getKey()); } } for (Tree tree : extras.keySet()) { treeAnnotations.removeProperties(tree); } }