src/interpreter/finite-automaton/nfa/builders.js
function repExplicit(fragment) {
  const inState = new NFAState();
  const outState = new NFAState({
    accepting: true,
  });

  // 0 or more.
  inState.addTransition(EPSILON, fragment.in);
  inState.addTransition(EPSILON, outState);

  fragment.out.accepting = false;
  fragment.out.addTransition(EPSILON, outState);
  outState.addTransition(EPSILON, fragment.in);

  return new NFA(inState, outState);
}
function repExplicit(fragment) {
  const inState = new NFAState();
  const outState = new NFAState({
    accepting: true,
  });

  // 0 or more.
  inState.addTransition(EPSILON, fragment.in);
  inState.addTransition(EPSILON, outState);

  fragment.out.accepting = false;
  fragment.out.addTransition(EPSILON, outState);
  outState.addTransition(EPSILON, fragment.in);

  return new NFA(inState, outState);
}
function repExplicit ( fragment ) { const inState = new NFAState ( ) ; const outState = new NFAState ( { accepting : true , } ) ; // 0 or more. inState . addTransition ( EPSILON , fragment . in ) ; inState . addTransition ( EPSILON , outState ) ; fragment . out . accepting = false ; fragment . out . addTransition ( EPSILON , outState ) ; outState . addTransition ( EPSILON , fragment . in ) ; return new NFA ( inState , outState ) ; }
----------------------------------------------------------------------------- Kleene-closure 
Kleene star/closure.

a*
----------------------------------------------------------------------------- Kleene - closure Kleene star / closure .