Example usage for org.antlr.v4.runtime.tree ParseTreeListener ParseTreeListener

List of usage examples for org.antlr.v4.runtime.tree ParseTreeListener ParseTreeListener

Introduction

In this page you can find the example usage for org.antlr.v4.runtime.tree ParseTreeListener ParseTreeListener.

Prototype

ParseTreeListener

Source Link

Usage

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);
    }
}