1
0
forked from GitHub/gf-core

Cleaned up some stuff while trying to find a bug. Turned out I just had not set the startcat in the grammar file. Time to go home I think.

This commit is contained in:
bringert
2005-09-12 21:32:24 +00:00
parent 4ed9ada62e
commit 775dff9e2b
2 changed files with 23 additions and 17 deletions

View File

@@ -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 ++ "]"
--

View File

@@ -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