public String[] getAltLabels(Rule r) { String[] altLabels = null; Map<String, List<Pair<Integer, AltAST>>> altLabelsMap = r.getAltLabels(); if ( altLabelsMap!=null ) { altLabels = new String[r.getOriginalNumberOfAlts() + 1]; for (String altLabel : altLabelsMap.keySet()) { List<Pair<Integer, AltAST>> pairs = altLabelsMap.get(altLabel); for (Pair<Integer, AltAST> pair : pairs) { altLabels[pair.a] = altLabel; } } } return altLabels; }
public static String getSemanticContextDisplayString(PredicateEvalInfo pred, PreviewState previewState, SemanticContext semctx, int alt, boolean result) { Grammar g = previewState.g; String semanticContextDisplayString = g.getSemanticContextDisplayString(semctx); if ( semctx instanceof SemanticContext.PrecedencePredicate ) { int ruleIndex = previewState.parsingResult.parser.getATN().decisionToState.get(pred.decision).ruleIndex; Rule rule = g.getRule(ruleIndex); int precedence = ((SemanticContext.PrecedencePredicate) semctx).precedence; // precedence = n - originalAlt + 1, So: int originalAlt = rule.getOriginalNumberOfAlts()-precedence+1; alt = originalAlt; } return semanticContextDisplayString+" => alt "+alt+" is "+result; }
altToContext = new AltLabelStructDecl[r.getOriginalNumberOfAlts()+1]; addContextGetters(factory, r);
altToContext = new AltLabelStructDecl[r.getOriginalNumberOfAlts()+1]; addContextGetters(factory, r);
altToContext = new AltLabelStructDecl[r.getOriginalNumberOfAlts()+1]; addContextGetters(factory, r);
altToContext = new AltLabelStructDecl[r.getOriginalNumberOfAlts()+1]; addContextGetters(factory, r);
@Override public String getText(Tree node) { if ( node instanceof PreviewInterpreterRuleContext) { PreviewInterpreterRuleContext inode = (PreviewInterpreterRuleContext)node; Rule r = g.getRule(inode.getRuleIndex()); String[] altLabels = getAltLabels(r); String name = r.name; int outerAltNum = inode.getOuterAltNum(); if ( altLabels!=null ) { if ( outerAltNum>=0 && outerAltNum<altLabels.length ) { return name+":"+altLabels[outerAltNum]; } else { return name; } } else if ( r.getOriginalNumberOfAlts()>1 ) { return name + ":" +outerAltNum; } else { return name; // don't display an alternative number if there's only one } } return Trees.getNodeText(node, Arrays.asList(parser.getRuleNames())); } }