public static Object getValue(DecisionInfo decisionInfo,
								  String[] ruleNamesByDecision,
								  int decision,
								  int col)
	{
		switch (col) { // laborious but more efficient than reflection
			case 0:
				return  String.format("%s:%d",ruleNamesByDecision[decision],decision);
			case 1:
				return decisionInfo.invocations;
			case 2:
				return decisionInfo.timeInPrediction/(1000.0 * 1000.0);
			case 3:
				return decisionInfo.LL_TotalLook+decisionInfo.SLL_TotalLook;
			case 4:
				return Math.max(decisionInfo.LL_MaxLook, decisionInfo.SLL_MaxLook);
			case 5:
				return decisionInfo.ambiguities.size();
			case 6:
				return decisionInfo.SLL_ATNTransitions+
						decisionInfo.LL_ATNTransitions;
		}
		return "n/a";
	}
Interpret a lexer/parser, optionally printing tree string and dumping profile info

 $ java org.antlr.v4.gui.Interpreter [X.g4|XParser.g4 XLexer.g4] startRuleName inputFileName
       [-tree]
       [-gui]
       [-trace]
       [-encoding encoding]
       [-tokens]
       [-profile filename.csv]
tool/src/org/antlr/v4/gui/Interpreter.java