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();
}
java类org.antlr.v4.runtime.tree.RuleNode的实例源码
AntlrUtils.java 文件源码
项目:templates4j
阅读 28
收藏 0
点赞 0
评论 0
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;
}