mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-10 19:52:50 -06:00
Use cat and language in ATK si. Support language switching with ATK.
This commit is contained in:
@@ -27,7 +27,6 @@ import GF.Formalism.CFG
|
||||
import GF.Formalism.Utilities (Symbol(..), mapSymbol, filterCats, symbol, NameProfile(..))
|
||||
import GF.Conversion.Types
|
||||
import GF.Infra.Ident (Ident)
|
||||
import GF.Infra.Option (Options)
|
||||
|
||||
import GF.Speech.FiniteState
|
||||
import GF.Speech.Graph
|
||||
@@ -57,9 +56,8 @@ data MFA a = MFA (DFA (MFALabel a)) [(String,DFA (MFALabel a))]
|
||||
|
||||
|
||||
|
||||
cfgToFA :: Options -> CGrammar -> DFA String
|
||||
cfgToFA opts = minimize . compileAutomaton start . makeSimpleRegular
|
||||
where start = getStartCat opts
|
||||
cfgToFA :: String -> CGrammar -> DFA String
|
||||
cfgToFA start = minimize . compileAutomaton start . makeSimpleRegular
|
||||
|
||||
makeSimpleRegular :: CGrammar -> CFRules
|
||||
makeSimpleRegular = makeRegular . removeIdenticalRules . removeEmptyCats . cfgToCFRules
|
||||
@@ -155,13 +153,12 @@ make_fa c@(g,ns) q0 alpha q1 fa =
|
||||
-- * Compile a strongly regular grammar to a DFA with sub-automata
|
||||
--
|
||||
|
||||
cfgToMFA :: Options -> CGrammar -> MFA String
|
||||
cfgToMFA opts g = buildMFA start g
|
||||
where start = getStartCat opts
|
||||
cfgToMFA :: String -> CGrammar -> MFA String
|
||||
cfgToMFA start g = buildMFA start g
|
||||
|
||||
-- | Build a DFA by building and expanding an MFA
|
||||
cfgToFA' :: Options -> CGrammar -> DFA String
|
||||
cfgToFA' opts g = mfaToDFA $ cfgToMFA opts g
|
||||
cfgToFA' :: String -> CGrammar -> DFA String
|
||||
cfgToFA' start g = mfaToDFA $ cfgToMFA start g
|
||||
|
||||
buildMFA :: Cat_ -- ^ Start category
|
||||
-> CGrammar -> MFA String
|
||||
|
||||
@@ -23,7 +23,6 @@ import GF.Conversion.Types
|
||||
import GF.Formalism.CFG
|
||||
import GF.Formalism.Utilities (Symbol(..),symbol)
|
||||
import GF.Infra.Ident
|
||||
import GF.Infra.Option
|
||||
import GF.Infra.Print
|
||||
import GF.Speech.CFGToFiniteState
|
||||
import GF.Speech.FiniteState
|
||||
@@ -37,10 +36,10 @@ import Data.Maybe (fromMaybe)
|
||||
|
||||
|
||||
faGraphvizPrinter :: Ident -- ^ Grammar name
|
||||
-> Options -> CGrammar -> String
|
||||
faGraphvizPrinter name opts cfg =
|
||||
-> String -> CGrammar -> String
|
||||
faGraphvizPrinter name start cfg =
|
||||
prFAGraphviz $ mapStates (const "") fa
|
||||
where fa = cfgToFA opts cfg
|
||||
where fa = cfgToFA start cfg
|
||||
|
||||
|
||||
-- | Convert the grammar to a regular grammar and print it in BNF
|
||||
@@ -53,8 +52,8 @@ regularPrinter = prCFRules . makeSimpleRegular
|
||||
showRhs = unwords . map (symbol id show)
|
||||
|
||||
faCPrinter :: Ident -- ^ Grammar name
|
||||
-> Options -> CGrammar -> String
|
||||
faCPrinter name opts cfg = fa2c $ cfgToFA opts cfg
|
||||
-> String -> CGrammar -> String
|
||||
faCPrinter name start cfg = fa2c $ cfgToFA start cfg
|
||||
|
||||
fa2c :: DFA String -> String
|
||||
fa2c fa = undefined
|
||||
@@ -26,7 +26,6 @@ import GF.Conversion.Types
|
||||
import GF.Formalism.CFG
|
||||
import GF.Formalism.Utilities (Symbol(..),symbol)
|
||||
import GF.Infra.Ident
|
||||
import GF.Infra.Option
|
||||
import GF.Infra.Print
|
||||
import GF.Speech.CFGToFiniteState
|
||||
import GF.Speech.FiniteState
|
||||
@@ -54,9 +53,9 @@ data SLFEdge = SLFEdge { eId :: Int, eStart :: Int, eEnd :: Int }
|
||||
|
||||
type SLF_FA = FA State (Maybe (MFALabel String)) ()
|
||||
|
||||
mkFAs :: Options -> CGrammar -> (SLF_FA, [(String,SLF_FA)])
|
||||
mkFAs opts cfg = (slfStyleFA main, [(c,slfStyleFA n) | (c,n) <- subs])
|
||||
where MFA main subs = {- renameSubs $ -} cfgToMFA opts cfg
|
||||
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
|
||||
|
||||
slfStyleFA :: Eq a => DFA a -> FA State (Maybe a) ()
|
||||
slfStyleFA = renameStates [0..] . removeTrivialEmptyNodes . oneFinalState Nothing ()
|
||||
@@ -76,9 +75,9 @@ renameSubs (MFA main subs) = MFA (renameLabels main) subs'
|
||||
-- * SLF graphviz printing (without sub-networks)
|
||||
--
|
||||
|
||||
slfGraphvizPrinter :: Ident -> Options -> CGrammar -> String
|
||||
slfGraphvizPrinter name opts cfg
|
||||
= prFAGraphviz $ gvFA $ slfStyleFA $ cfgToFA' opts cfg
|
||||
slfGraphvizPrinter :: Ident -> String -> CGrammar -> String
|
||||
slfGraphvizPrinter name start cfg
|
||||
= prFAGraphviz $ gvFA $ slfStyleFA $ cfgToFA' start cfg
|
||||
where
|
||||
gvFA = mapStates (fromMaybe "") . mapTransitions (const "")
|
||||
|
||||
@@ -87,9 +86,9 @@ slfGraphvizPrinter name opts cfg
|
||||
--
|
||||
|
||||
slfSubGraphvizPrinter :: Ident -- ^ Grammar name
|
||||
-> Options -> CGrammar -> String
|
||||
slfSubGraphvizPrinter name opts cfg = Dot.prGraphviz g
|
||||
where (main, subs) = mkFAs opts cfg
|
||||
-> String -> CGrammar -> String
|
||||
slfSubGraphvizPrinter name start cfg = Dot.prGraphviz g
|
||||
where (main, subs) = mkFAs start cfg
|
||||
g = STM.evalState (liftM2 Dot.addSubGraphs ss m) [0..]
|
||||
ss = mapM (\ (c,f) -> gvSLFFA (Just c) f) subs
|
||||
m = gvSLFFA Nothing main
|
||||
@@ -114,9 +113,9 @@ gvSLFFA n fa =
|
||||
-- * SLF printing (without sub-networks)
|
||||
--
|
||||
|
||||
slfPrinter :: Ident -> Options -> CGrammar -> String
|
||||
slfPrinter name opts cfg
|
||||
= prSLF (automatonToSLF mkSLFNode $ slfStyleFA $ cfgToFA' opts cfg) ""
|
||||
slfPrinter :: Ident -> String -> CGrammar -> String
|
||||
slfPrinter name start cfg
|
||||
= prSLF (automatonToSLF mkSLFNode $ slfStyleFA $ cfgToFA' start cfg) ""
|
||||
|
||||
--
|
||||
-- * SLF printing (with sub-networks)
|
||||
@@ -124,10 +123,10 @@ slfPrinter name opts cfg
|
||||
|
||||
-- | Make a network with subnetworks in SLF
|
||||
slfSubPrinter :: Ident -- ^ Grammar name
|
||||
-> Options -> CGrammar -> String
|
||||
slfSubPrinter name opts cfg = prSLFs slfs ""
|
||||
-> String -> CGrammar -> String
|
||||
slfSubPrinter name start cfg = prSLFs slfs ""
|
||||
where
|
||||
(main,subs) = mkFAs opts cfg
|
||||
(main,subs) = mkFAs start cfg
|
||||
slfs = SLFs [(c, faToSLF fa) | (c,fa) <- subs] (faToSLF main)
|
||||
faToSLF = automatonToSLF mfaNodeToSLFNode
|
||||
|
||||
|
||||
Reference in New Issue
Block a user