progs/dfa.scala
changeset 487 ffbc65112d48
parent 485 21dec9df46ba
child 576 414f1daf5728
equal deleted inserted replaced
486:3cc1799daf08 487:ffbc65112d48
    15 
    15 
    16   def accepts(s: List[C]) : Boolean = 
    16   def accepts(s: List[C]) : Boolean = 
    17     Try(fins(deltas(start, s))) getOrElse false
    17     Try(fins(deltas(start, s))) getOrElse false
    18 }
    18 }
    19 
    19 
    20 // the example shown earlier in the handout 
    20 // the example shown in the handout 
    21 abstract class State
    21 abstract class State
    22 case object Q0 extends State
    22 case object Q0 extends State
    23 case object Q1 extends State
    23 case object Q1 extends State
    24 case object Q2 extends State
    24 case object Q2 extends State
    25 case object Q3 extends State
    25 case object Q3 extends State
    39 
    39 
    40 val dfa = DFA(Q0, delta, Set[State](Q4))
    40 val dfa = DFA(Q0, delta, Set[State](Q4))
    41 
    41 
    42 dfa.accepts("bbabaab".toList)   // true
    42 dfa.accepts("bbabaab".toList)   // true
    43 dfa.accepts("baba".toList)      // false
    43 dfa.accepts("baba".toList)      // false
       
    44 
       
    45 
       
    46 // another DFA test with a Sink state
       
    47 abstract class S
       
    48 case object S0 extends S
       
    49 case object S1 extends S
       
    50 case object S2 extends S
       
    51 case object Sink extends S
       
    52 
       
    53 // transition function with a sink state
       
    54 val sigma : (S, Char) :=> S = 
       
    55   { case (S0, 'a') => S1
       
    56     case (S1, 'a') => S2
       
    57     case _ => Sink
       
    58   }
       
    59 
       
    60 val dfa1a = DFA(S0, sigma, Set[S](S2))
       
    61 
       
    62 dfa1a.accepts("aa".toList)        // true
       
    63 dfa1a.accepts("".toList)          // false
       
    64 dfa1a.accepts("ab".toList)        // false
       
    65