diff -r 1f1a293549c1 -r 30ea6b01db46 progs/automata/thompson.sc --- a/progs/automata/thompson.sc Tue Sep 01 16:00:37 2020 +0100 +++ b/progs/automata/thompson.sc Wed Sep 02 23:34:19 2020 +0100 @@ -24,15 +24,6 @@ type NFAtrans = (TState, Char) :=> Set[TState] type eNFAtrans = (TState, Option[Char]) :=> Set[TState] - -// for composing an eNFA transition with an NFA transition -// | is for set union -implicit def nfaOps(f: eNFAtrans) = new { - def +++(g: NFAtrans) : eNFAtrans = - { case (q, None) => applyOrElse(f, (q, None)) - case (q, Some(c)) => applyOrElse(f, (q, Some(c))) | applyOrElse(g, (q, c)) } -} - // NFA that does not accept any string def NFA_ZERO(): NFAt = { @@ -53,6 +44,16 @@ NFA(Set(Q1), { case (Q1, d) if (c == d) => Set(Q2) }, Set(Q2)) } + +// for composing an eNFA transition with an NFA transition +// | is for set union +implicit def nfaOps(f: eNFAtrans) = new { + def +++(g: NFAtrans) : eNFAtrans = + { case (q, None) => applyOrElse(f, (q, None)) + case (q, Some(c)) => applyOrElse(f, (q, Some(c))) | applyOrElse(g, (q, c)) } +} + + // sequence of two NFAs def NFA_SEQ(enfa1: NFAt, enfa2: NFAt) : NFAt = { val new_delta : eNFAtrans =