toStrings method
List<String>
toStrings(
- Recognizer<
ATNSimulator> ? recognizer, - PredictionContext stop,
- int currentState
Implementation
List<String> toStrings(
Recognizer? recognizer,
PredictionContext stop,
int currentState,
) {
final result = <String>[];
outer:
for (var perm = 0;; perm++) {
var offset = 0;
var last = true;
var p = this;
var stateNumber = currentState;
final localBuffer = StringBuffer();
localBuffer.write('[');
while (!p.isEmpty && p != stop) {
var index = 0;
if (p.length > 0) {
var bits = 1;
while ((1 << bits) < p.length) {
bits++;
}
final mask = (1 << bits) - 1;
index = (perm >> offset) & mask;
last &= index >= p.length - 1;
if (index >= p.length) {
continue outer;
}
offset += bits;
}
if (recognizer != null) {
if (localBuffer.length > 1) {
// first char is '[', if more than that this isn't the first rule
localBuffer.write(' ');
}
final atn = recognizer.getATN();
final s = atn.states[stateNumber]!;
final ruleName = recognizer.ruleNames[s.ruleIndex];
localBuffer.write(ruleName);
} else if (p.getReturnState(index) != EMPTY_RETURN_STATE) {
if (!p.isEmpty) {
if (localBuffer.length > 1) {
// first char is '[', if more than that this isn't the first rule
localBuffer.write(' ');
}
localBuffer.write(p.getReturnState(index));
}
}
stateNumber = p.getReturnState(index);
p = p.getParent(index) ?? EmptyPredictionContext.Instance;
}
localBuffer.write(']');
result.add(localBuffer.toString());
if (last) {
break;
}
}
return result;
}