start fsm, (bv tests not passing)

This commit is contained in:
Stephen Chang 2016-07-18 18:30:51 -04:00
parent dee0e2f8d0
commit e0f96296ed
4 changed files with 82 additions and 2 deletions

View File

@ -1,5 +1,5 @@
#lang turnstile
(extends "rosette.rkt" #:except bv)
(extends "rosette.rkt" #:except bv) ; extends typed rosette
(require (prefix-in ro: rosette)) ; untyped
(require (except-in "rosette.rkt" #%app define)) ; typed
(require (only-in sdsl/bv/lang/bvops bvredand bvredor)

View File

@ -0,0 +1,48 @@
#lang turnstile
(extends "rosette.rkt"); #:except →) ; extends typed rosette
(require (prefix-in ro: rosette)) ; untyped
(require (prefix-in ro: rosette/lib/synthax))
;; (require (except-in "rosette.rkt" #%app define)) ; typed
;; (require (only-in sdsl/bv/lang/bvops bvredand bvredor)
(require (prefix-in fsm: sdsl/fsm/fsm))
;(require (prefix-in fsm: (only-in sdsl/fsm/automaton automaton)))
;; ;(require (only-in sdsl/fsm/fsm automaton))
;; ;; (require sdsl/bv/lang/core (prefix-in bv: sdsl/bv/lang/form))
(define-base-types FSM Regexp State)
(define-typed-syntax pregexp
[(_ s)
[ [[s s-] : String]]
--------
[ [[_ (pregexp- s-)] : Regexp]]])
(define-typed-syntax automaton #:datum-literals (: )
[(_ init-state:id
[state:id : (label:id target) ...] ...)
[#:fail-unless (member (syntax->datum #'init-state)
(syntax->datum #'(state ...)))
(format "initial state ~a is not declared state: ~a"
(syntax->datum #'init-state)
(syntax->datum #'(state ...)))]
#;[#:fail-unless (let ([states (syntax->datum #'(state ...))])
(for/and ([t (syntax->datum #'(target ... ...))])
(member t states)))
(format "transition to unknown state")]
[#:with arr (datum->syntax #f ')]
[() ([state : State state-] ...)
[[init-state init-state-] : State]
[[target target-] : State] ... ...]
--------
[ [[_ (fsm:automaton init-state-
[state- : (label arr target-) ...] ...)]
: FSM]]])
(define-typed-syntax ?
[(_ e ...+)
[ [[e e-] : ty]] ...
--------
[ [[_ (ro:choose e ...)] : ( ty ...)]]])

View File

@ -99,7 +99,7 @@
(define-type-alias BVPred ( BV Bool))
;; TODO: fix me --- need subtyping?
(define-type-alias Nat Int)
(define-syntax Nat (make-rename-transformer #'Int))
;; TODO: support higher order case --- need intersect types?
;(define-rosette-primop bv : (→ Int BVPred BV)

View File

@ -0,0 +1,32 @@
#lang s-exp "../../rosette/fsm.rkt"
(require "../rackunit-typechecking.rkt")
(define m
(automaton init
[init : (c more)]
[more : (a more)
(d more)
(r end)]
[end : ]))
(define rx (pregexp "^c[ad]+r$"))
(define M
(automaton init
[init : (c (? s1 s2))]
[s1 : (a (? s1 s2 end reject))
(d (? s1 s2 end reject))
(r (? s1 s2 end reject))]
[s2 : (a (? s1 s2 end reject))
(d (? s1 s2 end reject))
(r (? s1 s2 end reject))]
[end : ]))
;; ; example commands
;; (m '(c a r))
;; (m '(c d r))
;; (m '(c a d a r))
;; (verify-automaton m #px"^c[ad]+r$")
;; (debug-automaton m #px"^c[ad]+r$" '(c r))
;; (synthesize-automaton M #px"^c[ad]+r$")