summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Speech/PrFA.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src-3.0/GF/Speech/PrFA.hs')
-rw-r--r--src-3.0/GF/Speech/PrFA.hs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src-3.0/GF/Speech/PrFA.hs b/src-3.0/GF/Speech/PrFA.hs
new file mode 100644
index 000000000..2856039ec
--- /dev/null
+++ b/src-3.0/GF/Speech/PrFA.hs
@@ -0,0 +1,56 @@
+----------------------------------------------------------------------
+-- |
+-- Module : PrSLF
+-- Maintainer : BB
+-- Stability : (stable)
+-- Portability : (portable)
+--
+-- > CVS $Date: 2005/11/10 16:43:44 $
+-- > CVS $Author: bringert $
+-- > CVS $Revision: 1.2 $
+--
+-- This module prints finite automata and regular grammars
+-- for a context-free grammar.
+--
+-- FIXME: remove \/ warn \/ fail if there are int \/ string literal
+-- categories in the grammar
+-----------------------------------------------------------------------------
+
+module GF.Speech.PrFA (faGraphvizPrinter,regularPrinter,faCPrinter) where
+
+import GF.Data.Utilities
+import GF.Conversion.Types
+import GF.Formalism.CFG
+import GF.Formalism.Utilities (Symbol(..),symbol)
+import GF.Infra.Ident
+import GF.Infra.Option (Options)
+import GF.Infra.Print
+import GF.Speech.CFGToFiniteState
+import GF.Speech.FiniteState
+import GF.Speech.TransformCFG
+import GF.Compile.ShellState (StateGrammar)
+
+import Data.Char (toUpper,toLower)
+import Data.List
+import Data.Maybe (fromMaybe)
+
+
+
+faGraphvizPrinter :: Options -> StateGrammar -> String
+faGraphvizPrinter opts s =
+ prFAGraphviz $ mapStates (const "") $ cfgToFA opts s
+
+-- | Convert the grammar to a regular grammar and print it in BNF
+regularPrinter :: Options -> StateGrammar -> String
+regularPrinter opts s = prCFRules $ makeSimpleRegular opts s
+ where
+ prCFRules :: CFRules -> String
+ prCFRules g = unlines [ c ++ " ::= " ++ join " | " (map (showRhs . ruleRhs) rs) | (c,rs) <- allRulesGrouped g]
+ join g = concat . intersperse g
+ showRhs = unwords . map (symbol id show)
+
+faCPrinter :: Options -> StateGrammar -> String
+faCPrinter opts s = fa2c $ cfgToFA opts s
+
+fa2c :: DFA String -> String
+fa2c fa = undefined