List of usage examples for org.antlr.v4.runtime BufferedTokenStream getHiddenTokensToRight
public List<Token> getHiddenTokensToRight(int tokenIndex)
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 {/*from w ww. jav a 2 s. com*/ 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; }