diff --git a/src/GF/Speech/FiniteState.hs b/src/GF/Speech/FiniteState.hs index f758975dc..100335a2d 100644 --- a/src/GF/Speech/FiniteState.hs +++ b/src/GF/Speech/FiniteState.hs @@ -5,9 +5,9 @@ -- Stability : (stable) -- Portability : (portable) -- --- > CVS $Date: 2005/09/12 21:54:32 $ +-- > CVS $Date: 2005/09/12 22:32:24 $ -- > CVS $Author: bringert $ --- > CVS $Revision: 1.5 $ +-- > CVS $Revision: 1.6 $ -- -- A simple finite state network module. ----------------------------------------------------------------------------- @@ -17,8 +17,9 @@ module GF.Speech.FiniteState (FA, State, newFA, addFinalState, newState, newTransition, - moveLabelsToNodes, minimize, asGraph, - Graph, prGraphGraphviz, nmap, emap) where + mapStates, mapTransitions, + moveLabelsToNodes, minimize, + prGraphGraphviz) where import Data.List import Data.Maybe (fromJust) @@ -57,7 +58,10 @@ newTransition :: Node -> Node -> b -> FA a b -> FA a b newTransition f t l = onGraph (newEdge f t l) mapStates :: (a -> c) -> FA a b -> FA c b -mapStates f (FA g s ss) = FA (nmap f g) s ss +mapStates f = onGraph (nmap f) + +mapTransitions :: (b -> c) -> FA a b -> FA a c +mapTransitions f = onGraph (emap f) asGraph :: FA a b -> Graph a b asGraph (FA g _ _) = g @@ -71,6 +75,15 @@ minimize = onGraph mimimizeGr1 moveLabelsToNodes :: Eq a => FA () (Maybe a) -> FA (Maybe a) () moveLabelsToNodes = onGraph moveLabelsToNodes_ +prGraphGraphviz :: FA String String -> String +prGraphGraphviz (FA (Graph _ ns es) _ _) = + "digraph {\n" ++ unlines (map prNode ns) + ++ "\n" + ++ unlines (map prEdge es) + ++ "\n}\n" + where prNode (n,l) = show n ++ " [label = " ++ show l ++ "]" + prEdge (f,t,l) = show f ++ " -> " ++ show t ++ " [label = " ++ show l ++ "]" + -- -- * Graphs -- @@ -152,14 +165,7 @@ mimimizeGr2 = id removeDuplicateEdges :: Ord b => Graph a b -> Graph a b removeDuplicateEdges (Graph c ns es) = Graph c ns (sortNub es) -prGraphGraphviz :: Graph String String -> String -prGraphGraphviz (Graph _ ss ts) = - "digraph {\n" ++ unlines (map prNode ss) - ++ "\n" - ++ unlines (map prEdge ts) - ++ "\n}\n" - where prNode (n,l) = show n ++ " [label = " ++ show l ++ "]" - prEdge (f,t,l) = show f ++ " -> " ++ show t ++ " [label = " ++ show l ++ "]" + -- diff --git a/src/GF/Speech/PrSLF.hs b/src/GF/Speech/PrSLF.hs index 0dbf97575..62c6def34 100644 --- a/src/GF/Speech/PrSLF.hs +++ b/src/GF/Speech/PrSLF.hs @@ -5,9 +5,9 @@ -- Stability : (stable) -- Portability : (portable) -- --- > CVS $Date: 2005/09/12 21:41:19 $ +-- > CVS $Date: 2005/09/12 22:32:24 $ -- > CVS $Author: bringert $ --- > CVS $Revision: 1.6 $ +-- > CVS $Revision: 1.7 $ -- -- This module converts a CFG to an SLF finite-state network -- for use with the ATK recognizer. The SLF format is described @@ -53,12 +53,12 @@ slfPrinter name opts cfg = prSLF (automatonToSLF $ moveLabelsToNodes $ cfgToFA n slfGraphvizPrinter :: Ident -- ^ Grammar name -> Options -> CGrammar -> String slfGraphvizPrinter name opts cfg = - prGraphGraphviz (nmap (fromMaybe "") $ emap (const "") $ asGraph $ moveLabelsToNodes $ cfgToFA name opts cfg) + prGraphGraphviz (mapStates (fromMaybe "") $ makeTransitions (const "") $ moveLabelsToNodes $ cfgToFA name opts cfg) faGraphvizPrinter :: Ident -- ^ Grammar name -> Options -> CGrammar -> String faGraphvizPrinter name opts cfg = - prGraphGraphviz (nmap (const "") $ emap (fromMaybe "") $ asGraph $ cfgToFA name opts cfg) + prGraphGraphviz (mapStates (const "") $ makeTransitions (fromMaybe "") $ cfgToFA name opts cfg) -- | Convert the grammar to a regular grammar and print it in BNF regularPrinter :: CGrammar -> String