Example usage for org.antlr.v4.runtime Parser getBuildParseTree

List of usage examples for org.antlr.v4.runtime Parser getBuildParseTree

Introduction

In this page you can find the example usage for org.antlr.v4.runtime Parser getBuildParseTree.

Prototype

public boolean getBuildParseTree() 

Source Link

Document

Gets whether or not a complete parse tree will be constructed while parsing.

Usage

From source file:org.eclipse.titan.common.parsers.ParserLogger.java

License:Open Source License

/**
 * Logs a parse tree./*from  www  .  j  av a2 s  .co m*/
 * Internal version.
 * RECURSIVE
 * @param aRoot parse tree
 * @param aParser parser to get rule name
 * @param aTokens token list to get tokens by index (for getting tokens of a rule) 
 * @param aTokenNameResolver resolver to get token name
 * @param aLevel indentation level
 * @param aParentOneChild parent has 1 child
 */
private static void log(final ParseTree aRoot, final Parser aParser, final List<Token> aTokens,
        final TokenNameResolver aTokenNameResolver, final int aLevel, final boolean aParentOneChild) {
    if (aRoot == null) {
        println("ERROR: ParseTree root is null");
        return;
    }
    if (!aParser.getBuildParseTree()) {
        println("ERROR: ParseTree is not build. Call Parser.setBuildParseTree( true ); BEFORE parsing. Or do NOT call Parser.setBuildParseTree( false );");
        return;
    }

    if (aRoot instanceof ParserRuleContext) {
        final ParserRuleContext rule = (ParserRuleContext) aRoot;
        final String ruleInfo = getRuleInfo(rule, aParser, aTokenNameResolver);
        if (aParentOneChild) {
            printArrow(ruleInfo);
        } else {
            printIndent(ruleInfo, aLevel);
        }

        final int count = rule.getChildCount();
        final boolean oneChild = count == 1 && rule.exception == null;
        if (!oneChild) {
            print(": '" + getEscapedRuleText(rule, aTokens) + "'");
            println();
        }

        for (int i = 0; i < count; i++) {
            final ParseTree child = rule.getChild(i);
            log(child, aParser, aTokens, aTokenNameResolver, aLevel + (aParentOneChild ? 0 : 1), oneChild);
        }
    } else if (aRoot instanceof TerminalNodeImpl) {
        final TerminalNodeImpl tn = (TerminalNodeImpl) aRoot;
        if (aParentOneChild) {
            print(": '" + getEscapedTokenText(tn.getSymbol()) + "'");
            println();
        }

        printIndent(getTokenInfo(tn.getSymbol(), aTokenNameResolver), aLevel);
        if (tn.parent == null) {
            print(", parent == null <-------------------------------------------------------------- ERROR");
        }
        println();
    } else if (aRoot instanceof AddedParseTree) {
        final AddedParseTree apt = (AddedParseTree) aRoot;
        if (aParentOneChild) {
            print(": '" + getEscapedText(apt.getText()) + "'");
            println();
        }
        printIndent("AddedParseString: " + getEscapedText(apt.getText()), aLevel);
        if (apt.getParent() == null) {
            print(", parent == null <-------------------------------------------------------------- ERROR");
        }
        println();
    } else {
        println("ERROR: INVALID ParseTree type");
    }
}