1 module FAneg 2 3 ( negTNFA 4 ) 5 6 where 7 8 import Set 9 import FiniteMap 10 11 import Stuff 12 import Options 13 14 import TA 15 import FAtypes 16 17 import FAconv 18 19 import FAdet 20 21 ------------------------------------------------------------------------- 22 23 negTNFA :: Opts -> TNFA Int -> TNFA Int 24 negTNFA opts x = 25 let BDFA cons all starts moves = tnfa2bdfa opts x 26 sink = 1 + maximum (0 : setToList all) 27 all1 = unitSet sink `unionSet` all 28 starts1 = all1 `minusSet` starts 29 moves1 = listToFM 30 [ (t, lookupWithDefaultFM moves sink t) 31 | tc <- setToList cons, n <- [tconarity tc] 32 , args <- setToList (insts (take n (repeat all1))) 33 , t <- [ mksterm tc args ] 34 ] 35 d = BDFA cons all1 starts1 moves1 36 u = bnfa2tnfa opts (bdfa2bnfa opts d) 37 in 38 trinfo opts "neg" u $ 39 u 40