Example usage for org.antlr.v4.runtime ParserRuleContext getChild

List of usage examples for org.antlr.v4.runtime ParserRuleContext getChild

Introduction

In this page you can find the example usage for org.antlr.v4.runtime ParserRuleContext getChild.

Prototype

@Override
    public ParseTree getChild(int i) 

Source Link

Usage

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

License:Open Source License

/**
 * Logs a parse tree.//from w  ww .j  a  v a  2s  .c  o 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");
    }
}

From source file:org.napile.asm.io.text.in.type.TypeNodeWorker.java

License:Apache License

protected void acceptChild(@NotNull ParserRuleContext<Token> parserRuleContext) {
    for (int i = 0; i < parserRuleContext.getChildCount(); i++) {
        ParseTree parserTree = parserRuleContext.getChild(i);
        if (parserTree instanceof ParserRuleContext)
            ((ParserRuleContext) parserTree).enterRule(this);
        else if (parserTree instanceof ParseTree.TerminalNode)
            visitTerminal((ParseTree.TerminalNode) parserTree);
    }//ww w  . ja v a2s. c  om
}

From source file:org.tinygroup.template.interpret.TemplateFromContext.java

License:GNU General Public License

/**
 * Trim ?Set ? ?//from  w ww  .j  av  a2  s .  c o m
 * @param text 
 * @param nowTerminalNode 
 * @param trimWhileSpace ???
 * @return
 */
private String trimCommentsDirectiveWhileSpaceNewLine(String text, TerminalNode nowTerminalNode,
        boolean trimWhileSpace) {
    if (text == null || text.length() == 0) {
        return "";
    }

    if (nowTerminalNode.getParent() instanceof TinyTemplateParser.TextContext) {
        // ??TextContext
        TinyTemplateParser.TextContext parseTree = (TinyTemplateParser.TextContext) nowTerminalNode.getParent();
        // ?Text Context?Block
        ParserRuleContext parentParserRuleContext = getParseTrreeParentButBlock(parseTree);
        if (isDirectiveNeedTrim(parentParserRuleContext)) {// ??Trim\r\n
            text = trimTextLeft(text);
            if (trimWhileSpace) {
                text = TemplateUtil.trimStart(text, stripWithSpaceChars);
                text = TemplateUtil.trimEnd(text, stripWithSpaceChars);
            }
        } else if (parentParserRuleContext instanceof TinyTemplateParser.BlockContext) {
            // ?Text ContextBlockContext?
            int parentChildrenIndex = getParentChildrenIndex(parseTree, parentParserRuleContext);
            // ?
            if (parentChildrenIndex > 0) {
                // ?
                ParseTree previousParseContext = parentParserRuleContext.getChild(parentChildrenIndex - 1);
                // text??
                if (previousParseContext instanceof TinyTemplateParser.CommentContext
                        || (previousParseContext instanceof TinyTemplateParser.DirectiveContext
                                && (previousParseContext
                                        .getChild(0) instanceof TinyTemplateParser.Set_directiveContext
                                        || previousParseContext.getChild(
                                                0) instanceof TinyTemplateParser.Blank_directiveContext
                                        || previousParseContext.getChild(
                                                0) instanceof TinyTemplateParser.Call_macro_directiveContext
                                        || previousParseContext.getChild(
                                                0) instanceof TinyTemplateParser.Call_macro_block_directiveContext
                                        || previousParseContext.getChild(
                                                0) instanceof TinyTemplateParser.Import_directiveContext
                                        || previousParseContext.getChild(
                                                0) instanceof TinyTemplateParser.If_directiveContext))) {
                    text = trimTextLeft(text);
                    if (trimWhileSpace) {
                        text = TemplateUtil.trimStart(text, stripWithSpaceChars);
                    }
                }

            }

            if (trimWhileSpace) {
                // ???
                if (parentChildrenIndex < parentParserRuleContext.getChildCount()) {
                    // ?
                    ParseTree previousParseContext = parentParserRuleContext.getChild(parentChildrenIndex + 1);
                    // text??
                    if (previousParseContext instanceof TinyTemplateParser.CommentContext
                            || (previousParseContext instanceof TinyTemplateParser.DirectiveContext
                                    && (previousParseContext
                                            .getChild(0) instanceof TinyTemplateParser.Set_directiveContext
                                            || previousParseContext.getChild(
                                                    0) instanceof TinyTemplateParser.Blank_directiveContext
                                            || previousParseContext.getChild(
                                                    0) instanceof TinyTemplateParser.Call_macro_directiveContext
                                            || previousParseContext.getChild(
                                                    0) instanceof TinyTemplateParser.Call_macro_block_directiveContext
                                            || previousParseContext.getChild(
                                                    0) instanceof TinyTemplateParser.Import_directiveContext
                                            || previousParseContext.getChild(
                                                    0) instanceof TinyTemplateParser.If_directiveContext))) {
                        text = TemplateUtil.trimEnd(text, stripWithSpaceChars);
                    }
                }
            }
        }
    }

    return text;
}

From source file:org.tinygroup.template.interpret.TemplateFromContext.java

License:GNU General Public License

/**
 * ??TextContext(?TextContextBlockContext)?List?
 * @param parseTree ?/* www  .j  a v  a2s  . co m*/
 * @param parserRuleContext 
 * @return
 */
private int getParentChildrenIndex(ParserRuleContext parseTree, ParserRuleContext parserRuleContext) {
    int parentChildrenIndex = 0;
    for (int i = 0; i < parserRuleContext.getChildCount(); i++) {
        ParserRuleContext childrenTree = (ParserRuleContext) parserRuleContext.getChild(i);
        if (childrenTree == parseTree) {
            parentChildrenIndex = i;
            break;
        }
    }
    return parentChildrenIndex;
}

From source file:org.wso2.ballerinalang.compiler.parser.BLangWSPreservingParserListener.java

License:Open Source License

@Override
public void exitEveryRule(ParserRuleContext parserRuleContext) {
    if (getWSWasCalledOn == parserRuleContext) {
        return;//  w  w  w .j  av  a2s. c  om
    }
    int rangeEndTokenIndex;
    if (parserRuleContext.stop == null) {
        ParseTree child = parserRuleContext.getChild(1);
        if (child instanceof TerminalNode) {
            // This is needed to handle A + B + C case of BinaryAddSubExpression
            rangeEndTokenIndex = ((TerminalNode) child).getSymbol().getTokenIndex();
        } else {
            return;
        }
    } else {
        rangeEndTokenIndex = parserRuleContext.stop.getTokenIndex() + 1;
    }

    closeLastRange(rangeEndTokenIndex);

    Stack<TokenRange> tokenRanges = rangesOfRuleContext.pop();

    Stack<Whitespace> ws = new Stack<>();
    for (TokenRange range : tokenRanges) {
        addWSFromRange(ws, range);
    }
    wsSinceLastNode.addAll(ws);

    if (!rangesOfRuleContext.isEmpty()) {
        rangesOfRuleContext.peek().add(new TokenRange(rangeEndTokenIndex));
    }
}

From source file:org.xgmtk.lore.ast.ASTBuilder.java

License:Apache License

protected static void printContext(ParserRuleContext ctx) {
    System.err.println("(Context object id: " + ctx + ", line: " + ctx.start.getLine() + ", \"" + ctx.getText()
            + "\", child count: " + ctx.getChildCount() + "){");
    for (int i = 0; i < ctx.getChildCount(); ++i) {
        ParseTree ptree = ctx.getChild(i);
        System.err.println("\t\"" + ptree.getText() + "\"(has: " + ptree.getChildCount() + ")");
    }/*from   w  w  w  .j a  v  a 2s. c  o m*/
    System.err.println("}");
}

From source file:org.xgmtk.lore.ast.ASTBuilder.java

License:Apache License

/**
 * TODO write JavaDoc comment./* w w  w . j  a v a 2s.  c o  m*/
 * 
 * @param ctx
 * @param string
 * @return
 */
protected static int indexOf(ParserRuleContext ctx, String string) {
    for (int i = 0; i < ctx.getChildCount(); ++i) {
        if (Objects.equals(ctx.getChild(i).getText(), string)) {
            return i;
        }
    }
    return -1;
}

From source file:org.xgmtk.lore.ast.ASTBuilder.java

License:Apache License

protected AST buildOperatorTree(ParserRuleContext ctx, final NonTerminalSymbol[] ops) {
    //      printContext(ctx);
    List<AST> cs = this.getChildrenList();
    //      System.err.println("ParseTree: \""+ctx.getText()+"\"");
    //      System.err.println("AST Children: "+cs.size());
    //      System.err.println("ParseTree Children: "+ctx.getChildCount());
    AST left = cs.get(0);//from  w ww. j  av  a2  s  .  co  m
    int ci = 1;
    for (int i = 1; i < ctx.getChildCount(); i += 2) {
        AST right = cs.get(ci++);
        NonTerminalSymbol t = selectNonterminalSymbol(ctx, ctx.getChild(i).getText(), ops);
        left = node(t, loc(src, ctx.getStart().getLine()), left, right);
    }
    return left;
}

From source file:processing.mode.java.preproc.PdeParseTreeListener.java

License:Open Source License

/**
 * Manage parsing out a size or fullscreen call.
 *
 * @param ctx The context of the call.//www . ja v a  2 s.c o  m
 */
private void handleSizeCall(ParserRuleContext ctx) {
    ParserRuleContext testCtx = ctx.getParent().getParent().getParent().getParent();

    boolean isInGlobal = testCtx instanceof ProcessingParser.StaticProcessingSketchContext;

    boolean isInSetup;
    if (!isInGlobal) {
        ParserRuleContext methodDeclaration = testCtx.getParent().getParent();

        isInSetup = isMethodSetup(methodDeclaration);
    } else {
        isInSetup = false;
    }

    ParseTree argsContext = ctx.getChild(2);

    boolean thisRequiresRewrite = false;

    boolean isSize = ctx.getChild(0).getText().equals(SIZE_METHOD_NAME);
    boolean isFullscreen = ctx.getChild(0).getText().equals(FULLSCREEN_METHOD_NAME);

    if (isInGlobal || isInSetup) {
        thisRequiresRewrite = true;

        if (isSize && argsContext.getChildCount() > 2) {
            sketchWidth = argsContext.getChild(0).getText();
            if (PApplet.parseInt(sketchWidth, -1) == -1 && !sketchWidth.equals("displayWidth")) {
                thisRequiresRewrite = false;
            }

            sketchHeight = argsContext.getChild(2).getText();
            if (PApplet.parseInt(sketchHeight, -1) == -1 && !sketchHeight.equals("displayHeight")) {
                thisRequiresRewrite = false;
            }

            if (argsContext.getChildCount() > 3) {
                sketchRenderer = argsContext.getChild(4).getText();
                if (!(sketchRenderer.equals("P2D") || sketchRenderer.equals("P3D")
                        || sketchRenderer.equals("OPENGL") || sketchRenderer.equals("JAVA2D")
                        || sketchRenderer.equals("FX2D"))) {
                    thisRequiresRewrite = false;
                }
            }
        }

        if (isFullscreen) {
            sketchWidth = "displayWidth";
            sketchWidth = "displayHeight";

            thisRequiresRewrite = true;
            sizeIsFullscreen = true;

            if (argsContext.getChildCount() > 0) {
                sketchRenderer = argsContext.getChild(0).getText();
                if (!(sketchRenderer.equals("P2D") || sketchRenderer.equals("P3D")
                        || sketchRenderer.equals("OPENGL") || sketchRenderer.equals("JAVA2D")
                        || sketchRenderer.equals("FX2D"))) {
                    thisRequiresRewrite = false;
                }
            }
        }
    }

    if (thisRequiresRewrite) {
        createDelete(ctx.start, ctx.stop);
        createInsertAfter(ctx.stop, "/* size commented out by preprocessor */");
        sizeRequiresRewrite = true;
    }
}

From source file:processing.mode.java.preproc.PdeParseTreeListener.java

License:Open Source License

/**
 * Determine if a method declaration is for setup.
 *
 * @param declaration The method declaration to parse.
 * @return True if setup and false otherwise.
 *//*  w  w w.j av  a  2 s  .  c o m*/
private boolean isMethodSetup(ParserRuleContext declaration) {
    if (declaration.getChildCount() < 2) {
        return false;
    }
    return declaration.getChild(1).getText().equals("setup");
}