|
- (import "sets.slime")
-
-
- (define (make-dfa Q S delta q0 F)
- (let ((q q0))
- (lambda (s)
- (mutate q (delta q s))
- `(,(if (set-contains? F q) :accept :fail) ,q))))
-
-
- (define (delta q s)
- (cond (s (case q
- (("q0") (case s (("M") "q1")))
- (("q1") (case s (("A") "q0")
- (("G") "q2")))
- (("q2") (case s (("E") "q0")))))
- (else q)))
-
-
- ;; (make-delta
- ;; ("q0" :: "M" -> "q1")
- ;; ("q1" :: "A" -> "q0"
- ;; "G" -> "q1")
- ;; ("q2" :: "E" -> "q0"))
-
- (define aut (make-dfa (make-set "q0" "q1" "q2")
- (make-set "M" "A" "G" "E")
- delta
- "q0"
- (make-set "q0")))
-
- (printf (aut "M"))
- (printf (aut "A"))
- (printf (aut "M"))
- (printf (aut "G"))
- (printf (aut "E"))
|