summaryrefslogtreecommitdiff
path: root/src/GF/Speech/PrSLF.hs
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2007-01-05 14:34:20 +0000
committerbringert <bringert@cs.chalmers.se>2007-01-05 14:34:20 +0000
commit741dde5a2a00dc737e570a7005663c2534ea4f6d (patch)
tree6aebd85fc4d9417a0bb3fbfb450fcf3ea72101b8 /src/GF/Speech/PrSLF.hs
parent2b1c6763cc29857ba2890a12eb4330f6e03edd06 (diff)
Change input to the different SRG printers to be StateGrammar instead of CGrammar. This to allow looking at the types in SISR, and to reduce the number of argument passed from Custom.
Diffstat (limited to 'src/GF/Speech/PrSLF.hs')
-rw-r--r--src/GF/Speech/PrSLF.hs39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/GF/Speech/PrSLF.hs b/src/GF/Speech/PrSLF.hs
index 7f96bba5e..08af81549 100644
--- a/src/GF/Speech/PrSLF.hs
+++ b/src/GF/Speech/PrSLF.hs
@@ -32,6 +32,7 @@ import GF.Speech.FiniteState
import GF.Speech.SRG
import GF.Speech.TransformCFG
import qualified GF.Visualization.Graphviz as Dot
+import GF.Compile.ShellState (StateGrammar)
import Control.Monad
import qualified Control.Monad.State as STM
@@ -53,9 +54,9 @@ data SLFEdge = SLFEdge { eId :: Int, eStart :: Int, eEnd :: Int }
type SLF_FA = FA State (Maybe (MFALabel String)) ()
-mkFAs :: String -> CGrammar -> (SLF_FA, [(String,SLF_FA)])
-mkFAs start cfg = (slfStyleFA main, [(c,slfStyleFA n) | (c,n) <- subs])
- where MFA main subs = {- renameSubs $ -} cfgToMFA start cfg
+mkFAs :: String -> StateGrammar -> (SLF_FA, [(String,SLF_FA)])
+mkFAs start s = (slfStyleFA main, [(c,slfStyleFA n) | (c,n) <- subs])
+ where MFA main subs = {- renameSubs $ -} cfgToMFA start s
slfStyleFA :: Eq a => DFA a -> FA State (Maybe a) ()
slfStyleFA = renameStates [0..] . removeTrivialEmptyNodes . oneFinalState Nothing ()
@@ -75,9 +76,9 @@ renameSubs (MFA main subs) = MFA (renameLabels main) subs'
-- * SLF graphviz printing (without sub-networks)
--
-slfGraphvizPrinter :: Ident -> String -> CGrammar -> String
-slfGraphvizPrinter name start cfg
- = prFAGraphviz $ gvFA $ slfStyleFA $ cfgToFA' start cfg
+slfGraphvizPrinter :: Ident -> String -> StateGrammar -> String
+slfGraphvizPrinter name start
+ = prFAGraphviz . gvFA . slfStyleFA . cfgToFA' start
where
gvFA = mapStates (fromMaybe "") . mapTransitions (const "")
@@ -86,9 +87,9 @@ slfGraphvizPrinter name start cfg
--
slfSubGraphvizPrinter :: Ident -- ^ Grammar name
- -> String -> CGrammar -> String
-slfSubGraphvizPrinter name start cfg = Dot.prGraphviz g
- where (main, subs) = mkFAs start cfg
+ -> String -> StateGrammar -> String
+slfSubGraphvizPrinter name start s = Dot.prGraphviz g
+ where (main, subs) = mkFAs start s
g = STM.evalState (liftM2 Dot.addSubGraphs ss m) [0..]
ss = mapM (\ (c,f) -> gvSLFFA (Just c) f) subs
m = gvSLFFA Nothing main
@@ -113,9 +114,9 @@ gvSLFFA n fa =
-- * SLF printing (without sub-networks)
--
-slfPrinter :: Ident -> String -> CGrammar -> String
-slfPrinter name start cfg
- = prSLF (automatonToSLF mkSLFNode $ slfStyleFA $ cfgToFA' start cfg) ""
+slfPrinter :: Ident -> String -> StateGrammar -> String
+slfPrinter name start
+ = prSLF . automatonToSLF mkSLFNode . slfStyleFA . cfgToFA' start
--
-- * SLF printing (with sub-networks)
@@ -123,10 +124,10 @@ slfPrinter name start cfg
-- | Make a network with subnetworks in SLF
slfSubPrinter :: Ident -- ^ Grammar name
- -> String -> CGrammar -> String
-slfSubPrinter name start cfg = prSLFs slfs ""
+ -> String -> StateGrammar -> String
+slfSubPrinter name start s = prSLFs slfs
where
- (main,subs) = mkFAs start cfg
+ (main,subs) = mkFAs start s
slfs = SLFs [(c, faToSLF fa) | (c,fa) <- subs] (faToSLF main)
faToSLF = automatonToSLF mfaNodeToSLFNode
@@ -157,13 +158,13 @@ mkSLFSubLat i sub = SLFSubLat { nId = i, nLat = sub }
mkSLFEdge :: Int -> (Int,Int) -> SLFEdge
mkSLFEdge i (f,t) = SLFEdge { eId = i, eStart = f, eEnd = t }
-prSLFs :: SLFs -> ShowS
-prSLFs (SLFs subs main) = unlinesS (map prSub subs ++ [prOneSLF main])
+prSLFs :: SLFs -> String
+prSLFs (SLFs subs main) = unlinesS (map prSub subs ++ [prOneSLF main]) ""
where prSub (n,s) = showString "SUBLAT=" . shows n
. nl . prOneSLF s . showString "." . nl
-prSLF :: SLF -> ShowS
-prSLF slf = {- showString "VERSION=1.0" . nl . -} prOneSLF slf
+prSLF :: SLF -> String
+prSLF slf = prOneSLF slf ""
prOneSLF :: SLF -> ShowS
prOneSLF (SLF { slfNodes = ns, slfEdges = es})