diff -r 8178fcf377dc -r a697421eaa04 progs/display/thompson1.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/progs/display/thompson1.scala Fri Apr 28 11:01:25 2017 +0100 @@ -0,0 +1,40 @@ +// Thompson Construction (Part 1) +// (needs :load nfa.scala +// :load enfa.scala) + + +// states for Thompson construction +case class TState(i: Int) extends State + +object TState { + var counter = 0 + + def apply() : TState = { + counter += 1; + new TState(counter - 1) + } +} + + +// some types abbreviations +type NFAt = NFA[TState, Char] + + +// NFA that does not accept any string +def NFA_ZERO(): NFAt = { + val Q = TState() + NFA(Set(Q), { case _ => Set() }, Set()) +} + +// NFA that accepts the empty string +def NFA_ONE() : NFAt = { + val Q = TState() + NFA(Set(Q), { case _ => Set() }, Set(Q)) +} + +// NFA that accepts the string "c" +def NFA_CHAR(c: Char) : NFAt = { + val Q1 = TState() + val Q2 = TState() + NFA(Set(Q1), { case (Q1, d) if (c == d) => Set(Q2) }, Set(Q2)) +}