List of usage examples for org.antlr.v4.runtime.tree RuleNode getRuleContext
RuleContext getRuleContext();
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(); }