This repository has been archived by the owner on Nov 17, 2019. It is now read-only.
/
main.hs
61 lines (45 loc) · 1.63 KB
/
main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import Copilot.Language.Reify
import Copilot.Language
import Copilot.Library.Clocks
import Copilot.Library.RegExp
import Copilot.Library.Utils
import qualified Copilot.Compile.SBV as S
import qualified Copilot.Compile.C99 as C
import qualified Prelude as P
import Debug.Trace
import Control.Monad (foldM_)
--------------------------------------------------------------------------------
import qualified Data.List as L
reset :: Stream Bool
reset = [ False ] ++ cycle [ False, False, False, True ]
-- | Regular expression matching on integral streams
s :: Stream Int8
s = extern "e" (Just $ P.cycle [ 0, 1 ])
test1 :: Stream Bool
test1 = copilotRegexp s "(<0>?<0>?<1>)+|<2>?<3>+" reset
-- | Regular expressions over boolean streams
s0, s1, s2, s3, s4, s5 :: Stream Bool
s0 = [ True, False, False, False, False, False ] ++ s1
s1 = [ False, True, False, False, False, False ] ++ s2
s2 = [ False, False, True, False, False, False ] ++ s3
s3 = [ False, False, False, True, False, False ] ++ s4
s4 = [ False, False, False, False, True, False ] ++ s5
s5 = [ False, False, False, False, False, True ] ++ s0
test2 :: Stream Bool
test2 = copilotRegexpB
"<s0><s1><s2><s3><s4><s5>(<s0>|<s1>|<s2>|<s3>|<s4>|<s5>)+"
[ ( "s0", s0 )
, ( "s1", s1 )
, ( "s2", s2 )
, ( "s3", s3 )
, ( "s4", s4 )
, ( "s5", s5 ) ] false
spec :: Spec
spec = do
observer "test1" test1
observer "test2" test2
observer "reset" reset
main = do
reify spec >>= C.compile C.defaultParams
reify spec >>= S.compile S.defaultParams
--------------------------------------------------------------------------------