verifyATN method
void
verifyATN(
- ATN atn
)
Implementation
void verifyATN(ATN atn) {
// verify assumptions
for (var state in atn.states) {
if (state == null) {
continue;
}
checkCondition(
state.onlyHasEpsilonTransitions() || state.numberOfTransitions <= 1);
if (state is PlusBlockStartState) {
checkCondition(state.loopBackState != null);
}
if (state is StarLoopEntryState) {
final starLoopEntryState = state;
checkCondition(starLoopEntryState.loopBackState != null);
checkCondition(starLoopEntryState.numberOfTransitions == 2);
if (starLoopEntryState.transition(0).target is StarBlockStartState) {
checkCondition(
starLoopEntryState.transition(1).target is LoopEndState);
checkCondition(!starLoopEntryState.nonGreedy);
} else if (starLoopEntryState.transition(0).target is LoopEndState) {
checkCondition(
starLoopEntryState.transition(1).target is StarBlockStartState);
checkCondition(starLoopEntryState.nonGreedy);
} else {
throw StateError('');
}
}
if (state is StarLoopbackState) {
checkCondition(state.numberOfTransitions == 1);
checkCondition(state.transition(0).target is StarLoopEntryState);
}
if (state is LoopEndState) {
checkCondition(state.loopBackState != null);
}
if (state is RuleStartState) {
checkCondition(state.stopState != null);
}
if (state is BlockStartState) {
checkCondition(state.endState != null);
}
if (state is BlockEndState) {
checkCondition(state.startState != null);
}
if (state is DecisionState) {
final decisionState = state;
checkCondition(decisionState.numberOfTransitions <= 1 ||
decisionState.decision >= 0);
} else {
checkCondition(
state.numberOfTransitions <= 1 || state is RuleStopState);
}
}
}