Example usage for org.antlr.v4.runtime.tree RuleNode getRuleContext

List of usage examples for org.antlr.v4.runtime.tree RuleNode getRuleContext

Introduction

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

Prototype

RuleContext getRuleContext();

Source Link

Usage

From source file:com.espertech.esper.epl.parse.ASTConstantHelper.java

License:Open Source License

/**
 * Parse the AST constant node and return Object value.
 * @param node - parse node for which to parse the string value
 * @return value matching AST node type/*from  www.  j a v  a2  s.co  m*/
 */
public static Object parse(ParseTree node) {
    if (node instanceof TerminalNode) {
        TerminalNode terminal = (TerminalNode) node;
        switch (terminal.getSymbol().getType()) {
        case EsperEPL2GrammarParser.BOOLEAN_TRUE:
            return BoolValue.parseString(terminal.getText());
        case EsperEPL2GrammarParser.BOOLEAN_FALSE:
            return BoolValue.parseString(terminal.getText());
        case EsperEPL2GrammarParser.VALUE_NULL:
            return null;
        default:
            throw ASTWalkException.from(
                    "Encountered unexpected constant type " + terminal.getSymbol().getType(),
                    terminal.getSymbol());
        }
    } else {
        RuleNode ruleNode = (RuleNode) node;
        int ruleIndex = ruleNode.getRuleContext().getRuleIndex();
        if (ruleIndex == EsperEPL2GrammarParser.RULE_number) {
            return parseNumber(ruleNode, 1);
        } else if (ruleIndex == EsperEPL2GrammarParser.RULE_numberconstant) {
            RuleNode number = findChildRuleByType(ruleNode, EsperEPL2GrammarParser.RULE_number);
            if (ruleNode.getChildCount() > 1) {
                if (ASTUtil.isTerminatedOfType(ruleNode.getChild(0), EsperEPL2GrammarLexer.MINUS)) {
                    return parseNumber(number, -1);
                }
                return parseNumber(number, 1);
            } else {
                return parseNumber(number, 1);
            }
        } else if (ruleIndex == EsperEPL2GrammarParser.RULE_stringconstant) {
            return StringValue.parseString(node.getText());
        } else if (ruleIndex == EsperEPL2GrammarParser.RULE_constant) {
            return parse(ruleNode.getChild(0));
        }
        throw ASTWalkException.from("Encountered unrecognized constant", node.getText());
    }
}

From source file:com.espertech.esper.epl.parse.ASTConstantHelper.java

License:Open Source License

private static boolean isRuleOfType(Tree child, int ruleNum) {
    if (!(child instanceof RuleNode)) {
        return false;
    }//  www . j  a v a 2s. co m
    RuleNode ruleNode = (RuleNode) child;
    return ruleNode.getRuleContext().getRuleIndex() == ruleNum;
}

From source file:com.espertech.esper.epl.parse.ASTUtil.java

License:Open Source License

public static int getRuleIndexIfProvided(ParseTree tree) {
    if (!(tree instanceof RuleNode)) {
        return -1;
    }//from  ww  w  .  jav  a 2 s . co  m
    RuleNode ruleNode = (RuleNode) tree;
    return ruleNode.getRuleContext().getRuleIndex();
}

From source file:org.sourcepit.ltk.parser.ParseTreeBuilder.java

License:Apache License

private Rule handleRuleNode(Terminal origin, Rule parent, RuleNode ruleNode) {
    final RuleContext ruleContext = ruleNode.getRuleContext();
    final List<ParseNode> children = new ArrayList<>();
    final Rule rule = new Rule(parent, children, ruleContext.getClass(), origin);
    for (int i = 0; i < ruleNode.getChildCount(); i++) {
        final ParseTree child = ruleNode.getChild(i);
        if (child instanceof RuleNode) {
            children.add(handleRuleNode(null, rule, (RuleNode) child));
        } else {/*w w  w.j a v a2 s.c o  m*/
            final TerminalNode terminalNode = (TerminalNode) child;
            final ParseResult parseResult = parseResultStack.peek();
            final BufferedTokenStream tokenStream = parseResult.getTokenStream();
            final org.antlr.v4.runtime.Token token = terminalNode.getSymbol();
            final int tokenIndex = token.getTokenIndex();

            // final TerminalContext tc = new TerminalContext();
            // tc.terminalNode = terminalNode;
            // tc.tokenStream = tokenStream;

            // tokenIndexToTerminalNodeMap.put(Integer.valueOf(tokenIndex), tc);

            final List<org.antlr.v4.runtime.Token> hiddenTokensToLeft = tokenStream
                    .getHiddenTokensToLeft(tokenIndex);
            if (hiddenTokensToLeft != null && !hiddenTokensToLeft.isEmpty()) {
                int prevTokenIdx = hiddenTokensToLeft.get(0).getTokenIndex() - 1;
                int startIdx;
                if (prevTokenIdx < 0) {
                    startIdx = 0;
                } else {
                    // final TerminalContext preTc = tokenIndexToTerminalNodeMap.get(Integer.valueOf(prevTokenIdx));
                    // final TerminalNode preTerminalNode = preTc.terminalNode;
                    // startIdx = parserDelegeate.getLen((RuleNode) preTerminalNode.getParent(),
                    // preTerminalNode.getSymbol(),
                    // hiddenTokensToLeft, preTc.tokenStream);
                    startIdx = tokenIndexToHiddenWsLength.get(Integer.valueOf(prevTokenIdx));
                }
                for (int j = startIdx; j < hiddenTokensToLeft.size(); j++) {
                    final TerminalNodeImpl dummy = new TerminalNodeImpl(hiddenTokensToLeft.get(j));
                    dummy.parent = ruleNode;
                    children.add(handleTerminalNode(null, rule, dummy));
                }
            }

            if (terminalNode.getSymbol().getType() != Lexer.EOF) {
                children.add(handleTerminalNode(null, rule, terminalNode));
            }

            final List<org.antlr.v4.runtime.Token> hiddenTokensToRight = tokenStream
                    .getHiddenTokensToRight(tokenIndex);
            if (hiddenTokensToRight != null) {
                int len = parserDelegeate.getLen(ruleNode, token, hiddenTokensToRight, tokenStream);
                tokenIndexToHiddenWsLength.put(Integer.valueOf(tokenIndex), Integer.valueOf(len));
                for (int j = 0; j < len; j++) {
                    final TerminalNodeImpl dummy = new TerminalNodeImpl(hiddenTokensToRight.get(j));
                    dummy.parent = ruleNode;
                    children.add(handleTerminalNode(null, rule, dummy));
                }
            }
        }
    }
    return rule;
}

From source file:parser.walkers.SnapTreeWalker.java

License:Open Source License

/**
 * The discovery of a rule node, involves sending two events: the generic
 * {@link ParseTreeListener#enterEveryRule} and a
 * {@link RuleContext}-specific event. First we trigger the generic and then
 * the rule specific. We to them in reverse order upon finishing the node.
 *///from w  w w .j a  va 2s  .  c  o m
protected void enterRule(ParseTreeListener listener, RuleNode r) {
    GlobalInfo info = GlobalInfo.getInstance();
    info.enterRuleSetup();
    ParserRuleContext ctx = (ParserRuleContext) r.getRuleContext();
    listener.enterEveryRule(ctx);
    ctx.enterRule(listener);
}

From source file:parser.walkers.SnapTreeWalker.java

License:Open Source License

protected void exitRule(ParseTreeListener listener, RuleNode r) {
    ParserRuleContext ctx = (ParserRuleContext) r.getRuleContext();
    ctx.exitRule(listener);// ww  w.  j av a  2 s.com
    listener.exitEveryRule(ctx);
    GlobalInfo info = GlobalInfo.getInstance();
    info.exitRuleSetup();
}