14 new TState(counter - 1) |
14 new TState(counter - 1) |
15 } |
15 } |
16 } |
16 } |
17 |
17 |
18 |
18 |
19 // some types abbreviations |
19 // a type abbreviation |
20 type NFAt = NFA[TState, Char] |
20 type NFAt = NFA[TState, Char] |
21 |
21 |
22 |
22 |
23 // NFA that does not accept any string |
23 // a NFA that does not accept any string |
24 def NFA_ZERO(): NFAt = { |
24 def NFA_ZERO(): NFAt = { |
25 val Q = TState() |
25 val Q = TState() |
26 NFA(Set(Q), { case _ => Set() }, Set()) |
26 NFA(Set(Q), { case _ => Set() }, Set()) |
27 } |
27 } |
28 |
28 |
29 // NFA that accepts the empty string |
29 // a NFA that accepts the empty string |
30 def NFA_ONE() : NFAt = { |
30 def NFA_ONE() : NFAt = { |
31 val Q = TState() |
31 val Q = TState() |
32 NFA(Set(Q), { case _ => Set() }, Set(Q)) |
32 NFA(Set(Q), { case _ => Set() }, Set(Q)) |
33 } |
33 } |
34 |
34 |
35 // NFA that accepts the string "c" |
35 // a NFA that accepts the string "c" |
36 def NFA_CHAR(c: Char) : NFAt = { |
36 def NFA_CHAR(c: Char) : NFAt = { |
37 val Q1 = TState() |
37 val Q1 = TState() |
38 val Q2 = TState() |
38 val Q2 = TState() |
39 NFA(Set(Q1), { case (Q1, d) if (c == d) => Set(Q2) }, Set(Q2)) |
39 NFA(Set(Q1), { case (Q1, d) if (c == d) => Set(Q2) }, Set(Q2)) |
40 } |
40 } |