mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
Added monolithic SLF builind back in.
This commit is contained in:
@@ -14,6 +14,9 @@ Changes in functionality since May 17, 2005, release of GF Version 2.2
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
|
5/1 (BB) New grammar printers <tt>slf_sub</tt> and <tt>slf_sub_graphviz</tt>
|
||||||
|
for creating SLF networks with sub-automata.
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
22/12 <b>Release of GF 2.4</b>.
|
22/12 <b>Release of GF 2.4</b>.
|
||||||
|
|||||||
@@ -599,7 +599,9 @@ txtHelpFile =
|
|||||||
"\n -printer=srgs_xml SRGS XML format" ++
|
"\n -printer=srgs_xml SRGS XML format" ++
|
||||||
"\n -printer=srgs_xml_prob SRGS XML format, with weights" ++
|
"\n -printer=srgs_xml_prob SRGS XML format, with weights" ++
|
||||||
"\n -printer=slf a finite automaton in the HTK SLF format" ++
|
"\n -printer=slf a finite automaton in the HTK SLF format" ++
|
||||||
"\n -printer=slf_graphviz the same automaton as in SLF, but in Graphviz format" ++
|
"\n -printer=slf_graphviz the same automaton as slf, but in Graphviz format" ++
|
||||||
|
"\n -printer=slf_sub a finite automaton with sub-automata in the HTK SLF format" ++
|
||||||
|
"\n -printer=slf_sub_graphviz the same automaton as slf_sub, but in Graphviz format" ++
|
||||||
"\n -printer=fa_graphviz a finite automaton with labelled edges" ++
|
"\n -printer=fa_graphviz a finite automaton with labelled edges" ++
|
||||||
"\n -printer=regular a regular grammar in a simple BNF" ++
|
"\n -printer=regular a regular grammar in a simple BNF" ++
|
||||||
"\n -printer=unpar a gfc grammar with parameters eliminated" ++
|
"\n -printer=unpar a gfc grammar with parameters eliminated" ++
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
-- categories in the grammar
|
-- categories in the grammar
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
module GF.Speech.PrSLF (slfPrinter,slfGraphvizPrinter) where
|
module GF.Speech.PrSLF (slfPrinter,slfGraphvizPrinter,
|
||||||
|
slfSubPrinter,slfSubGraphvizPrinter) where
|
||||||
|
|
||||||
import GF.Data.Utilities
|
import GF.Data.Utilities
|
||||||
import GF.Conversion.Types
|
import GF.Conversion.Types
|
||||||
@@ -37,7 +38,7 @@ import Control.Monad
|
|||||||
import qualified Control.Monad.State as STM
|
import qualified Control.Monad.State as STM
|
||||||
import Data.Char (toUpper)
|
import Data.Char (toUpper)
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.Maybe (maybe)
|
import Data.Maybe
|
||||||
|
|
||||||
data SLFs = SLFs [(String,SLF)] SLF
|
data SLFs = SLFs [(String,SLF)] SLF
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ mkFAs :: Options -> CGrammar -> (SLF_FA, [(String,SLF_FA)])
|
|||||||
mkFAs opts cfg = (slfStyleFA main, [(c,slfStyleFA n) | (c,n) <- subs])
|
mkFAs opts cfg = (slfStyleFA main, [(c,slfStyleFA n) | (c,n) <- subs])
|
||||||
where MFA main subs = {- renameSubs $ -} cfgToMFA opts cfg
|
where MFA main subs = {- renameSubs $ -} cfgToMFA opts cfg
|
||||||
|
|
||||||
slfStyleFA :: DFA (MFALabel String) -> SLF_FA
|
slfStyleFA :: Eq a => DFA a -> FA State (Maybe a) ()
|
||||||
slfStyleFA = renameStates [0..] . removeTrivialEmptyNodes . oneFinalState Nothing ()
|
slfStyleFA = renameStates [0..] . removeTrivialEmptyNodes . oneFinalState Nothing ()
|
||||||
. moveLabelsToNodes . dfa2nfa
|
. moveLabelsToNodes . dfa2nfa
|
||||||
|
|
||||||
@@ -72,12 +73,22 @@ renameSubs (MFA main subs) = MFA (renameLabels main) subs'
|
|||||||
renameLabel l = l
|
renameLabel l = l
|
||||||
|
|
||||||
--
|
--
|
||||||
-- * SLF graphviz printing
|
-- * SLF graphviz printing (without sub-networks)
|
||||||
--
|
--
|
||||||
|
|
||||||
slfGraphvizPrinter :: Ident -- ^ Grammar name
|
slfGraphvizPrinter :: Ident -> Options -> CGrammar -> String
|
||||||
|
slfGraphvizPrinter name opts cfg
|
||||||
|
= prFAGraphviz $ gvFA $ slfStyleFA $ cfgToFA opts cfg
|
||||||
|
where
|
||||||
|
gvFA = mapStates (fromMaybe "") . mapTransitions (const "")
|
||||||
|
|
||||||
|
--
|
||||||
|
-- * SLF graphviz printing (with sub-networks)
|
||||||
|
--
|
||||||
|
|
||||||
|
slfSubGraphvizPrinter :: Ident -- ^ Grammar name
|
||||||
-> Options -> CGrammar -> String
|
-> Options -> CGrammar -> String
|
||||||
slfGraphvizPrinter name opts cfg = Dot.prGraphviz g
|
slfSubGraphvizPrinter name opts cfg = Dot.prGraphviz g
|
||||||
where (main, subs) = mkFAs opts cfg
|
where (main, subs) = mkFAs opts cfg
|
||||||
g = STM.evalState (liftM2 Dot.addSubGraphs ss m) [0..]
|
g = STM.evalState (liftM2 Dot.addSubGraphs ss m) [0..]
|
||||||
ss = mapM (\ (c,f) -> gvSLFFA (Just c) f) subs
|
ss = mapM (\ (c,f) -> gvSLFFA (Just c) f) subs
|
||||||
@@ -100,20 +111,29 @@ gvSLFFA n fa =
|
|||||||
return fa'
|
return fa'
|
||||||
|
|
||||||
--
|
--
|
||||||
-- * SLF printing
|
-- * SLF printing (without sub-networks)
|
||||||
|
--
|
||||||
|
|
||||||
|
slfPrinter :: Ident -> Options -> CGrammar -> String
|
||||||
|
slfPrinter name opts cfg
|
||||||
|
= prSLF (automatonToSLF mkSLFNode $ slfStyleFA $ cfgToFA opts cfg) ""
|
||||||
|
|
||||||
|
--
|
||||||
|
-- * SLF printing (with sub-networks)
|
||||||
--
|
--
|
||||||
|
|
||||||
-- | Make a network with subnetworks in SLF
|
-- | Make a network with subnetworks in SLF
|
||||||
slfPrinter :: Ident -- ^ Grammar name
|
slfSubPrinter :: Ident -- ^ Grammar name
|
||||||
-> Options -> CGrammar -> String
|
-> Options -> CGrammar -> String
|
||||||
slfPrinter name opts cfg = prSLFs slfs ""
|
slfSubPrinter name opts cfg = prSLFs slfs ""
|
||||||
where
|
where
|
||||||
(main,subs) = mkFAs opts cfg
|
(main,subs) = mkFAs opts cfg
|
||||||
slfs = SLFs [(c, automatonToSLF fa) | (c,fa) <- subs] (automatonToSLF main)
|
slfs = SLFs [(c, faToSLF fa) | (c,fa) <- subs] (faToSLF main)
|
||||||
|
faToSLF = automatonToSLF mfaNodeToSLFNode
|
||||||
|
|
||||||
automatonToSLF :: SLF_FA -> SLF
|
automatonToSLF :: (Int -> a -> SLFNode) -> FA State a () -> SLF
|
||||||
automatonToSLF fa = SLF { slfNodes = ns, slfEdges = es }
|
automatonToSLF mkNode fa = SLF { slfNodes = ns, slfEdges = es }
|
||||||
where ns = map (uncurry mfaNodeToSLFNode) (states fa)
|
where ns = map (uncurry mkNode) (states fa)
|
||||||
es = zipWith (\i (f,t,()) -> mkSLFEdge i (f,t)) [0..] (transitions fa)
|
es = zipWith (\i (f,t,()) -> mkSLFEdge i (f,t)) [0..] (transitions fa)
|
||||||
|
|
||||||
mfaNodeToSLFNode :: Int -> Maybe (MFALabel String) -> SLFNode
|
mfaNodeToSLFNode :: Int -> Maybe (MFALabel String) -> SLFNode
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ import GF.CF.CFtoSRG
|
|||||||
import GF.Speech.PrGSL (gslPrinter)
|
import GF.Speech.PrGSL (gslPrinter)
|
||||||
import GF.Speech.PrJSGF (jsgfPrinter)
|
import GF.Speech.PrJSGF (jsgfPrinter)
|
||||||
import GF.Speech.PrSRGS (srgsXmlPrinter)
|
import GF.Speech.PrSRGS (srgsXmlPrinter)
|
||||||
import GF.Speech.PrSLF (slfPrinter,slfGraphvizPrinter)
|
import GF.Speech.PrSLF
|
||||||
import GF.Speech.PrFA (faGraphvizPrinter,regularPrinter,faCPrinter)
|
import GF.Speech.PrFA (faGraphvizPrinter,regularPrinter,faCPrinter)
|
||||||
|
|
||||||
import GF.Data.Zipper
|
import GF.Data.Zipper
|
||||||
@@ -259,6 +259,12 @@ customGrammarPrinter =
|
|||||||
,(strCI "slf_graphviz", \s -> let opts = stateOptions s
|
,(strCI "slf_graphviz", \s -> let opts = stateOptions s
|
||||||
name = cncId s
|
name = cncId s
|
||||||
in slfGraphvizPrinter name opts $ stateCFG s)
|
in slfGraphvizPrinter name opts $ stateCFG s)
|
||||||
|
,(strCI "slf_sub", \s -> let opts = stateOptions s
|
||||||
|
name = cncId s
|
||||||
|
in slfSubPrinter name opts $ stateCFG s)
|
||||||
|
,(strCI "slf_sub_graphviz", \s -> let opts = stateOptions s
|
||||||
|
name = cncId s
|
||||||
|
in slfSubGraphvizPrinter name opts $ stateCFG s)
|
||||||
,(strCI "fa_graphviz", \s -> let opts = stateOptions s
|
,(strCI "fa_graphviz", \s -> let opts = stateOptions s
|
||||||
name = cncId s
|
name = cncId s
|
||||||
in faGraphvizPrinter name opts $ stateCFG s)
|
in faGraphvizPrinter name opts $ stateCFG s)
|
||||||
|
|||||||
@@ -570,7 +570,9 @@ q, quit: q
|
|||||||
-printer=srgs_xml SRGS XML format
|
-printer=srgs_xml SRGS XML format
|
||||||
-printer=srgs_xml_prob SRGS XML format, with weights
|
-printer=srgs_xml_prob SRGS XML format, with weights
|
||||||
-printer=slf a finite automaton in the HTK SLF format
|
-printer=slf a finite automaton in the HTK SLF format
|
||||||
-printer=slf_graphviz the same automaton as in SLF, but in Graphviz format
|
-printer=slf_graphviz the same automaton as slf, but in Graphviz format
|
||||||
|
-printer=slf_sub a finite automaton with sub-automata in the HTK SLF format
|
||||||
|
-printer=slf_sub_graphviz the same automaton as slf_sub, but in Graphviz format
|
||||||
-printer=fa_graphviz a finite automaton with labelled edges
|
-printer=fa_graphviz a finite automaton with labelled edges
|
||||||
-printer=regular a regular grammar in a simple BNF
|
-printer=regular a regular grammar in a simple BNF
|
||||||
-printer=unpar a gfc grammar with parameters eliminated
|
-printer=unpar a gfc grammar with parameters eliminated
|
||||||
|
|||||||
Reference in New Issue
Block a user