25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

47 lines
1.3 KiB

  1. (import "sets.slime")
  2. (import "automata.slime")
  3. ;; (make-delta
  4. ;; ("q0" :: "M" -> "q1")
  5. ;; ("q1" :: "A" -> "q0"
  6. ;; "G" -> "q1")
  7. ;; ("q2" :: "E" -> "q0"))
  8. (define (delta q s)
  9. (cond (s (case q
  10. (("q0") (case s (("M") "q1")))
  11. (("q1") (case s (("A") "q0")
  12. (("G") "q2")))
  13. (("q2") (case s (("E") "q0")))))
  14. (else q)))
  15. (define aut (automata::make-dfa (set::make "q0" "q1" "q2")
  16. (set::make "M" "A" "G" "E")
  17. delta
  18. "q0"
  19. (set::make "q0")))
  20. (let ((state (aut ())))
  21. (assert (= (car state) :accept))
  22. (assert (= (car (cdr state)) "q0")))
  23. (let ((state (aut "M")))
  24. (assert (= (car state) :fail))
  25. (assert (= (car (cdr state)) "q1")))
  26. (let ((state (aut "A")))
  27. (assert (= (car state) :accept))
  28. (assert (= (car (cdr state)) "q0")))
  29. (let ((state (aut "M")))
  30. (assert (= (car state) :fail))
  31. (assert (= (car (cdr state)) "q1")))
  32. (let ((state (aut "G")))
  33. (assert (= (car state) :fail))
  34. (assert (= (car (cdr state)) "q2")))
  35. (let ((state (aut "E")))
  36. (assert (= (car state) :accept))
  37. (assert (= (car (cdr state)) "q0")))