edgeFactory method

Transition edgeFactory(
  1. ATN atn,
  2. TransitionType type,
  3. int src,
  4. int trg,
  5. int arg1,
  6. int arg2,
  7. int arg3,
  8. List<IntervalSet> sets,
)

Implementation

Transition edgeFactory(
  ATN atn,
  TransitionType type,
  int src,
  int trg,
  int arg1,
  int arg2,
  int arg3,
  List<IntervalSet> sets,
) {
  final target = atn.states[trg]!;
  switch (type) {
    case TransitionType.EPSILON:
      return EpsilonTransition(target);
    case TransitionType.RANGE:
      return arg3 != 0
          ? RangeTransition(target, Token.EOF, arg2)
          : RangeTransition(target, arg1, arg2);
    case TransitionType.RULE:
      final rt = RuleTransition(
          atn.states[arg1] as RuleStartState, arg2, arg3, target);
      return rt;
    case TransitionType.PREDICATE:
      final pt = PredicateTransition(target, arg1, arg2, arg3 != 0);
      return pt;
    case TransitionType.PRECEDENCE:
      return PrecedencePredicateTransition(target, arg1);
    case TransitionType.ATOM:
      return arg3 != 0
          ? AtomTransition(target, Token.EOF)
          : AtomTransition(target, arg1);
    case TransitionType.ACTION:
      final a = ActionTransition(target, arg1, arg2, arg3 != 0);
      return a;
    case TransitionType.SET:
      return SetTransition(target, sets[arg1]);
    case TransitionType.NOT_SET:
      return NotSetTransition(target, sets[arg1]);
    case TransitionType.WILDCARD:
      return WildcardTransition(target);
    case TransitionType.INVALID:
      throw ArgumentError.value(type, 'transition type', 'not valid.');
    default:
      throw ArgumentError.value(type, 'transition type', 'not valid.');
  }
}