fst-0.9: FST/ReversalT.hs
{-
**************************************************************
* Filename : ReversalT.hs *
* Author : Markus Forsberg *
* d97forma@dtek.chalmers.se *
* Last Modified : 7 July, 2001 *
* Lines : 30 *
**************************************************************
-}
module FST.ReversalT ( reversal -- Reverse a transducer.
) where
import FST.Transducer
import Data.Array
reversal :: Eq a => Transducer a -> Transducer a
reversal transducer = reverseTrans (rename (transitionTable transducer)
(alphabet transducer)
(finals transducer)
(initials transducer)
(firstState transducer))
reverseTrans :: Eq a => Transducer a -> Transducer a
reverseTrans transducer = let bs = (firstState transducer, lastState transducer)
table = assocs $ accumArray (\tl1 tl2 -> tl1 ++ tl2) []
bs [(s1,[(a,s)]) | (s,tl) <- transitionTable transducer,
(a,s1) <- tl]
in construct bs table (alphabet transducer) (initials transducer) (finals transducer)