List of usage examples for org.antlr.v4.runtime Parser getBuildParseTree
public boolean getBuildParseTree()
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"); } }