Files
gf-core/src-3.0/GF/Compile/Export.hs

45 lines
1.3 KiB
Haskell

module GF.Compile.Export where
import PGF.CId
import PGF.Data (PGF(..))
import PGF.Raw.Print (printTree)
import PGF.Raw.Convert (fromPGF)
import GF.Compile.GFCCtoHaskell
import GF.Compile.GFCCtoJS
import GF.Infra.Option
import GF.Speech.CFG
import GF.Speech.PGFToCFG
import GF.Speech.SRGS_XML
import GF.Speech.JSGF
import GF.Speech.VoiceXML
import GF.Text.UTF8
-- top-level access to code generation
prPGF :: OutputFormat
-> PGF
-> String -- ^ Output name, for example used for generated Haskell
-- module name.
-> String
prPGF fmt gr name = case fmt of
FmtPGF -> printPGF gr
FmtJavaScript -> pgf2js gr
FmtHaskell -> grammar2haskell gr name
FmtHaskell_GADT -> grammar2haskellGADT gr name
FmtBNF -> prCFG $ pgfToCFG gr (outputConcr gr)
FmtSRGS_XML -> srgsXmlPrinter Nothing gr (outputConcr gr)
FmtJSGF -> jsgfPrinter Nothing gr (outputConcr gr)
FmtVoiceXML -> grammar2vxml gr (outputConcr gr)
-- | Get the name of the concrete syntax to generate output from.
-- FIXME: there should be an option to change this.
outputConcr :: PGF -> CId
outputConcr pgf = case cncnames pgf of
[] -> error "No concrete syntax."
cnc:_ -> cnc
printPGF :: PGF -> String
printPGF = encodeUTF8 . printTree . fromPGF