java类org.antlr.v4.runtime.tree.RuleNode的实例源码

AntlrUtils.java 文件源码 项目:templates4j 阅读 28 收藏 0 点赞 0 评论 0
public static String getNodeText(Tree t, String[] ruleNames, String[] tokenNames) {
    if (ruleNames != null) {
        if (t instanceof RuleNode) {
            int ruleIndex = ((RuleNode) t).getRuleContext().getRuleIndex();
            return ruleNames[ruleIndex];
        } else if (t instanceof ErrorNode) {
            return t.toString();
        } else if (t instanceof TerminalNode) {
            Token symbol = ((TerminalNode) t).getSymbol();
            if (symbol != null) {
                return "'" + symbol.getText() + "'";
            }
        }
    }
    // no recog for rule names
    Object payload = t.getPayload();
    if (payload instanceof Token) {
        return ((Token) payload).getText();
    }
    return t.getPayload().toString();
}
HashVisitor.java 文件源码 项目:Purify 阅读 18 收藏 0 点赞 0 评论 0
@Override
public Integer visitChildren(RuleNode arg0) {
    int iHash = 1;
    boolean bVisit = false;

    for (int i = arg0.getChildCount() - 1; i >= 0; i--) {
        Integer iVisit = visit(arg0.getChild(i));

        // If the visit resulted no hash ignore the hash.
        if (iVisit != null) {
            iHash = iHash * PRIME + iVisit;
            bVisit = true;
        }
    }

    if (bVisit) {
        return iHash;
    } else {
        return defaultResult(); // No result.
    }
}
GrammarIndentTask.java 文件源码 项目:antlrworks2 阅读 29 收藏 0 点赞 0 评论 0
@Override
@RuleDependencies({
    @RuleDependency(recognizer=GrammarParser.class, rule=GrammarParser.RULE_modeSpec, version=3, dependents=Dependents.PARENTS),
    @RuleDependency(recognizer=GrammarParser.class, rule=GrammarParser.RULE_ruleSpec, version=3, dependents=Dependents.PARENTS),
})
public Tuple2<? extends ParseTree, Integer> visitModeSpec(ModeSpecContext ctx) {
    // use the preceeding rule (if any), otherwise relative to mode
    for (int i = priorSiblings.size() - 2; i >= 0; i--) {
        ParseTree sibling = priorSiblings.get(i);
        if (!(sibling instanceof RuleNode)) {
            continue;
        }

        RuleContext context = ((RuleNode)sibling).getRuleContext();
        if (context.getRuleIndex() == GrammarParser.RULE_ruleSpec) {
            return Tuple.create(context, 0);
        }
    }

    return Tuple.create(ctx, getCodeStyle().getIndentSize());
}
ParseTrees.java 文件源码 项目:antlrworks2 阅读 27 收藏 0 点赞 0 评论 0
public static Interval getSourceInterval(@NonNull ParseTree context) {
    Parameters.notNull("context", context);

    if (context instanceof TerminalNode) {
        TerminalNode terminalNode = (TerminalNode)context;
        Token token = terminalNode.getSymbol();
        return new Interval(token.getStartIndex(), token.getStopIndex());
    } else if (context instanceof RuleNode) {
        RuleNode ruleNode = (RuleNode)context;
        RuleContext ruleContext = ruleNode.getRuleContext();
        if (ruleContext instanceof ParserRuleContext) {
            return getSourceInterval((ParserRuleContext)ruleContext);
        } else {
            Token startSymbol = getStartSymbol(context);
            Token stopSymbol = getStopSymbol(context);
            if (startSymbol == null || stopSymbol == null) {
                return Interval.INVALID;
            }

            return new Interval(startSymbol.getStartIndex(), stopSymbol.getStopIndex());
        }
    } else {
        return Interval.INVALID;
    }
}
ParseTrees.java 文件源码 项目:antlrworks2 阅读 27 收藏 0 点赞 0 评论 0
public static Token getStartSymbol(ParseTree context) {
    TerminalNode node = getStartNode(context);
    if (node != null) {
        return node.getSymbol();
    }

    if (!(context instanceof RuleNode)) {
        return null;
    }

    RuleContext ruleContext = ((RuleNode)context).getRuleContext();
    if (ruleContext instanceof ParserRuleContext) {
        return ((ParserRuleContext)ruleContext).getStart();
    }

    return null;
}
ParseTrees.java 文件源码 项目:antlrworks2 阅读 30 收藏 0 点赞 0 评论 0
@CheckForNull
public static RuleNode findAncestor(@NonNull ParseTree tree, @NonNull BitSet ruleIndexes) {
    for (ParseTree current = tree; current != null; current = current.getParent()) {
        if (!(current instanceof RuleNode)) {
            continue;
        }

        RuleNode ruleNode = (RuleNode)current;
        int ruleIndex = ruleNode.getRuleContext().getRuleIndex();
        if (ruleIndex < 0) {
            continue;
        }

        if (ruleIndexes.get(ruleIndex)) {
            return ruleNode;
        }
    }

    return null;
}
ParseTrees.java 文件源码 项目:antlrworks2 阅读 53 收藏 0 点赞 0 评论 0
@CheckForNull
public static <ContextClass> ContextClass findAncestor(@NonNull ParseTree tree, @NonNull Class<ContextClass> nodeType) {
    for (ParseTree current = tree; current != null; current = current.getParent()) {
        if (!(current instanceof RuleNode)) {
            continue;
        }

        RuleNode ruleNode = (RuleNode)current;
        RuleContext ruleContext = ruleNode.getRuleContext();
        if (nodeType.isInstance(ruleContext)) {
            return nodeType.cast(ruleContext);
        }
    }

    return null;
}
PropertyPath.java 文件源码 项目:javersion 阅读 17 收藏 0 点赞 0 评论 0
public final SubPath propertyOrKey(String string) {
    checkNotNull(string);
    try {
        return newParser(string, true).parseProperty().accept(new PropertyPathBaseVisitor<SubPath>() {

            @Override
            public SubPath visitProperty(PropertyPathParser.PropertyContext ctx) {
                return new Property(PropertyPath.this, ctx.getText());
            }

            @Override
            protected boolean shouldVisitNextChild(RuleNode node, SubPath currentResult) {
                return currentResult == null;
            }

        });
    } catch (SilentParseException e) {
        return new Key(this, string);
    }
}
Visitor.java 文件源码 项目:ts-swift-transpiler 阅读 27 收藏 0 点赞 0 评论 0
public String visitChildren(RuleNode node, List<Integer> withoutNodes) {
    if(node == null) return "";
    String result = this.defaultResult();
    int n = node.getChildCount();

    for(int i = 0; i < n && this.shouldVisitNextChild(node, result); ++i) {
        if(withoutNodes != null && withoutNodes.contains(i)) continue;
        ParseTree c = node.getChild(i);
        String childResult = c instanceof TerminalNode ? printTerminalNode((TerminalNode) c) : c.accept(this);
        result = this.aggregateResult(result, childResult);
    }

    return result;
}
Visitor.java 文件源码 项目:ts-swift-transpiler 阅读 22 收藏 0 点赞 0 评论 0
public String visitWithoutTerminals(RuleNode node) {
    String result = this.defaultResult();
    int n = node.getChildCount();

    for(int i = 0; i < n && this.shouldVisitNextChild(node, result); ++i) {
        ParseTree c = node.getChild(i);
        if(c instanceof TerminalNode) continue;
        String childResult = c.accept(this);
        result = this.aggregateResult(result, childResult);
    }

    return result;
}


问题


面经


文章

微信
公众号

扫码关注公众号