public ParseTreeNode(@NonNull ParseTree tree, @NullAllowed List<String> ruleNames) {
super(Children.LEAF);
_tree = tree;
_ruleNames = ruleNames;
if (tree.getChildCount() > 0) {
setChildren(Children.createLazy(new ChildrenOfParseTreeNodeCreator()));
}
if (tree instanceof RuleNode) {
RuleNode ruleNode = (RuleNode)tree;
RuleContext ruleContext = ruleNode.getRuleContext();
if (ruleContext instanceof ParserRuleContext && ruleContext.getClass() != ParserRuleContext.class && ruleContext.getClass() != InterpreterRuleContext.class) {
String contextName = ruleContext.getClass().getSimpleName();
if (!"Context".equals(contextName) && contextName.endsWith("Context")) {
contextName = contextName.substring(0, contextName.length() - "Context".length());
}
contextName = Character.toLowerCase(contextName.charAt(0)) + contextName.substring(1);
setDisplayName(contextName);
} else {
String displayName = null;
if (ruleNames != null && ruleContext.getRuleIndex() >= 0 && ruleContext.getRuleIndex() < ruleNames.size()) {
displayName = ruleNames.get(ruleContext.getRuleIndex());
}
if (displayName == null || displayName.isEmpty()) {
displayName = "Rule Node";
}
setDisplayName(displayName);
}
} else if (tree instanceof ErrorNode) {
setDisplayName("Error Node");
} else if (tree instanceof TerminalNode) {
String nodeText = tree.getText();
if (nodeText != null && !nodeText.isEmpty()) {
nodeText = nodeText.substring(0, Math.min(nodeText.length(), 100));
nodeText = nodeText.replace("\\", "\\\\");
nodeText = nodeText.replace("\r", "\\r");
nodeText = nodeText.replace("\n", "\\n");
nodeText = nodeText.replace("\t", "\\t");
nodeText = nodeText.replace("'", "\\'");
setDisplayName("'" + nodeText + "'");
} else {
setDisplayName("Terminal Node");
}
}
}
ParseTreeNode.java 文件源码
java
阅读 22
收藏 0
点赞 0
评论 0
项目:antlrworks2
作者:
评论列表
文章目录