Example usage for org.antlr.v4.runtime BufferedTokenStream getHiddenTokensToLeft

List of usage examples for org.antlr.v4.runtime BufferedTokenStream getHiddenTokensToLeft

Introduction

In this page you can find the example usage for org.antlr.v4.runtime BufferedTokenStream getHiddenTokensToLeft.

Prototype

public List<Token> getHiddenTokensToLeft(int tokenIndex) 

Source Link

Document

Collect all hidden tokens (any off-default channel) to the left of the current token up until we see a token on DEFAULT_TOKEN_CHANNEL.

Usage

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 a  2 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;
}