mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
Added -startcat flag to the pg command.
This commit is contained in:
@@ -216,7 +216,7 @@ speechInput opt s = recognizeSpeech name language cfg cat number
|
|||||||
name = cncId s
|
name = cncId s
|
||||||
cfg = stateCFG s -- FIXME: use lang flag to select grammar
|
cfg = stateCFG s -- FIXME: use lang flag to select grammar
|
||||||
language = fromMaybe "en_UK" (getOptVal opts speechLanguage)
|
language = fromMaybe "en_UK" (getOptVal opts speechLanguage)
|
||||||
cat = fromMaybe "S" (getOptVal opts gStartCat) ++ "{}.s"
|
cat = prCFCat (firstCatOpts opts s) ++ "{}.s"
|
||||||
number = optIntOrN opts flagNumber 1
|
number = optIntOrN opts flagNumber 1
|
||||||
|
|
||||||
optLinearizeTreeVal :: Options -> GFGrammar -> Tree -> String
|
optLinearizeTreeVal :: Options -> GFGrammar -> Tree -> String
|
||||||
@@ -327,7 +327,9 @@ prMultiGrammar opts = M.showMGrammar (oElem optimizeCanon opts)
|
|||||||
-- access to customizable commands
|
-- access to customizable commands
|
||||||
|
|
||||||
optPrintGrammar :: Options -> StateGrammar -> String
|
optPrintGrammar :: Options -> StateGrammar -> String
|
||||||
optPrintGrammar opts = customOrDefault opts grammarPrinter customGrammarPrinter
|
optPrintGrammar opts = pg opts
|
||||||
|
where
|
||||||
|
pg = customOrDefault opts grammarPrinter customGrammarPrinter
|
||||||
|
|
||||||
optPrintMultiGrammar :: Options -> CanonGrammar -> String
|
optPrintMultiGrammar :: Options -> CanonGrammar -> String
|
||||||
optPrintMultiGrammar opts = encodeId . pmg opts . encode
|
optPrintMultiGrammar opts = encodeId . pmg opts . encode
|
||||||
|
|||||||
@@ -133,6 +133,8 @@ txtHelpFile =
|
|||||||
"\n flags: " ++
|
"\n flags: " ++
|
||||||
"\n -printer" ++
|
"\n -printer" ++
|
||||||
"\n -lang" ++
|
"\n -lang" ++
|
||||||
|
"\n -startcat -- The start category of the generated grammar." ++
|
||||||
|
"\n Only supported by some grammar printers." ++
|
||||||
"\n examples:" ++
|
"\n examples:" ++
|
||||||
"\n pg -printer=cf -- show the context-free skeleton" ++
|
"\n pg -printer=cf -- show the context-free skeleton" ++
|
||||||
"\n" ++
|
"\n" ++
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ optionsOfCommand co = case co of
|
|||||||
CSystemCommand _ -> none
|
CSystemCommand _ -> none
|
||||||
CGrep _ -> opts "v"
|
CGrep _ -> opts "v"
|
||||||
|
|
||||||
CPrintGrammar -> both "utf8" "printer lang"
|
CPrintGrammar -> both "utf8" "printer lang startcat"
|
||||||
CPrintMultiGrammar -> both "utf8 utf8id" "printer"
|
CPrintMultiGrammar -> both "utf8 utf8id" "printer"
|
||||||
CPrintSourceGrammar -> both "utf8" "printer"
|
CPrintSourceGrammar -> both "utf8" "printer"
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ recognizeSpeech :: Ident -- ^ Grammar name
|
|||||||
-> IO [String]
|
-> IO [String]
|
||||||
recognizeSpeech name language cfg start number =
|
recognizeSpeech name language cfg start number =
|
||||||
do
|
do
|
||||||
-- FIXME: use cat
|
|
||||||
let slf = slfPrinter name start cfg
|
let slf = slfPrinter name start cfg
|
||||||
n = prIdent name
|
n = prIdent name
|
||||||
hmmName = "hmm_" ++ language
|
hmmName = "hmm_" ++ language
|
||||||
@@ -119,10 +118,10 @@ recognizeSpeech name language cfg start number =
|
|||||||
recName = "rec_" ++ language ++ "_" ++ n
|
recName = "rec_" ++ language ++ "_" ++ n
|
||||||
writeFile "debug.net" slf
|
writeFile "debug.net" slf
|
||||||
initATK language
|
initATK language
|
||||||
hPutStrLn stderr "Loading grammar..."
|
hPutStrLn stderr $ "Loading grammar " ++ n ++ " ..."
|
||||||
loadGrammarString slfName slf
|
loadGrammarString slfName slf
|
||||||
createRecognizer recName hmmName dictName slfName
|
createRecognizer recName hmmName dictName slfName
|
||||||
hPutStrLn stderr "Listening..."
|
hPutStrLn stderr $ "Listening in category " ++ start ++ "..."
|
||||||
s <- replicateM number (recognize recName)
|
s <- replicateM number (recognize recName)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ import GF.Text.ExtraDiacritics (mkExtraDiacritics)
|
|||||||
customGrammarParser :: CustomData (FilePath -> IOE C.CanonGrammar)
|
customGrammarParser :: CustomData (FilePath -> IOE C.CanonGrammar)
|
||||||
|
|
||||||
-- | grammarPrinter, \"-printer=x\"
|
-- | grammarPrinter, \"-printer=x\"
|
||||||
customGrammarPrinter :: CustomData (StateGrammar -> String)
|
customGrammarPrinter :: CustomData (Options -> StateGrammar -> String)
|
||||||
|
|
||||||
-- | multiGrammarPrinter, \"-printer=x\"
|
-- | multiGrammarPrinter, \"-printer=x\"
|
||||||
customMultiGrammarPrinter :: CustomData (Options -> CanonGrammar -> String)
|
customMultiGrammarPrinter :: CustomData (Options -> CanonGrammar -> String)
|
||||||
@@ -238,67 +238,58 @@ customGrammarParser =
|
|||||||
customGrammarPrinter =
|
customGrammarPrinter =
|
||||||
customData "Grammar printers, selected by option -printer=x" $
|
customData "Grammar printers, selected by option -printer=x" $
|
||||||
[
|
[
|
||||||
(strCI "gfc", prCanon . stateGrammarST) -- DEFAULT
|
(strCI "gfc", \_ -> prCanon . stateGrammarST) -- DEFAULT
|
||||||
,(strCI "gf", err id prGrammar . canon2sourceGrammar . stateGrammarST)
|
,(strCI "gf", \_ -> err id prGrammar . canon2sourceGrammar . stateGrammarST)
|
||||||
,(strCI "cf", prCF . stateCF)
|
,(strCI "cf", \_ -> prCF . stateCF)
|
||||||
,(strCI "old", printGrammarOld . stateGrammarST)
|
,(strCI "old", \_ -> printGrammarOld . stateGrammarST)
|
||||||
,(strCI "srg", prSRG . stateCF)
|
,(strCI "srg", \_ -> prSRG . stateCF)
|
||||||
,(strCI "gsl", \s -> let opts = stateOptions s
|
,(strCI "gsl", \opts s -> let name = cncId s
|
||||||
name = cncId s
|
in gslPrinter name opts Nothing $ stateCFG s)
|
||||||
in gslPrinter name opts Nothing $ stateCFG s)
|
,(strCI "jsgf", \opts s -> let name = cncId s
|
||||||
,(strCI "jsgf", \s -> let opts = stateOptions s
|
in jsgfPrinter name opts Nothing $ stateCFG s)
|
||||||
name = cncId s
|
,(strCI "srgs_xml", \opts s -> let name = cncId s
|
||||||
in jsgfPrinter name opts Nothing $ stateCFG s)
|
in srgsXmlPrinter name opts False Nothing $ stateCFG s)
|
||||||
,(strCI "srgs_xml", \s -> let opts = stateOptions s
|
,(strCI "srgs_xml_prob",
|
||||||
name = cncId s
|
\opts s -> let name = cncId s
|
||||||
in srgsXmlPrinter name opts False Nothing $ stateCFG s)
|
probs = stateProbs s
|
||||||
,(strCI "srgs_xml_prob", \s -> let opts = stateOptions s
|
in srgsXmlPrinter name opts False (Just probs) $ stateCFG s)
|
||||||
name = cncId s
|
,(strCI "srgs_xml_ms_sem",
|
||||||
probs = stateProbs s
|
\opts s -> let name = cncId s
|
||||||
in srgsXmlPrinter name opts False (Just probs) $ stateCFG s)
|
in srgsXmlPrinter name opts True Nothing $ stateCFG s)
|
||||||
,(strCI "srgs_xml_ms_sem", \s -> let opts = stateOptions s
|
,(strCI "vxml", \_ -> grammar2vxml . stateGrammarST)
|
||||||
name = cncId s
|
,(strCI "slf", \opts s -> let start = getStartCat opts
|
||||||
in srgsXmlPrinter name opts True Nothing $ stateCFG s)
|
name = cncId s
|
||||||
,(strCI "vxml", grammar2vxml . stateGrammarST)
|
in slfPrinter name start $ stateCFG s)
|
||||||
,(strCI "slf", \s -> let opts = stateOptions s
|
,(strCI "slf_graphviz", \opts s -> let start = getStartCat opts
|
||||||
start = getStartCat opts
|
name = cncId s
|
||||||
name = cncId s
|
in slfGraphvizPrinter name start $ stateCFG s)
|
||||||
in slfPrinter name start $ stateCFG s)
|
,(strCI "slf_sub", \opts s -> let start = getStartCat opts
|
||||||
,(strCI "slf_graphviz", \s -> let opts = stateOptions s
|
|
||||||
start = getStartCat opts
|
|
||||||
name = cncId s
|
name = cncId s
|
||||||
in slfGraphvizPrinter name start $ stateCFG s)
|
in slfSubPrinter name start $ stateCFG s)
|
||||||
,(strCI "slf_sub", \s -> let opts = stateOptions s
|
,(strCI "slf_sub_graphviz", \opts s -> let start = getStartCat opts
|
||||||
start = getStartCat opts
|
name = cncId s
|
||||||
name = cncId s
|
in slfSubGraphvizPrinter name start $ stateCFG s)
|
||||||
in slfSubPrinter name start $ stateCFG s)
|
,(strCI "fa_graphviz", \opts s -> let start = getStartCat opts
|
||||||
,(strCI "slf_sub_graphviz", \s -> let opts = stateOptions s
|
|
||||||
start = getStartCat opts
|
|
||||||
name = cncId s
|
name = cncId s
|
||||||
in slfSubGraphvizPrinter name start $ stateCFG s)
|
in faGraphvizPrinter name start $ stateCFG s)
|
||||||
,(strCI "fa_graphviz", \s -> let opts = stateOptions s
|
,(strCI "fa_c", \opts s -> let start = getStartCat opts
|
||||||
start = getStartCat opts
|
name = cncId s
|
||||||
name = cncId s
|
in faCPrinter name start $ stateCFG s)
|
||||||
in faGraphvizPrinter name start $ stateCFG s)
|
,(strCI "regular", \_ -> regularPrinter . stateCFG)
|
||||||
,(strCI "fa_c", \s -> let opts = stateOptions s
|
,(strCI "plbnf", \_ -> prLBNF True)
|
||||||
start = getStartCat opts
|
,(strCI "lbnf", \_ -> prLBNF False)
|
||||||
name = cncId s
|
,(strCI "bnf", \_ -> prBNF False)
|
||||||
in faCPrinter name start $ stateCFG s)
|
,(strCI "haskell", \_ -> grammar2haskell . stateGrammarST)
|
||||||
,(strCI "regular", regularPrinter . stateCFG)
|
,(strCI "transfer", \_ -> grammar2transfer . stateGrammarST)
|
||||||
,(strCI "plbnf", prLBNF True)
|
,(strCI "morpho", \_ -> prMorpho . stateMorpho)
|
||||||
,(strCI "lbnf", prLBNF False)
|
,(strCI "fullform",\_ -> prFullForm . stateMorpho)
|
||||||
,(strCI "bnf", prBNF False)
|
,(strCI "opts", \_ -> prOpts . stateOptions)
|
||||||
,(strCI "haskell", grammar2haskell . stateGrammarST)
|
,(strCI "words", \_ -> unwords . stateGrammarWords)
|
||||||
,(strCI "transfer", grammar2transfer . stateGrammarST)
|
,(strCI "printnames", \_ -> C.prPrintnamesGrammar . stateGrammarST)
|
||||||
,(strCI "morpho", prMorpho . stateMorpho)
|
,(strCI "stat", \_ -> prStatistics . stateGrammarST)
|
||||||
,(strCI "fullform",prFullForm . stateMorpho)
|
,(strCI "probs", \_ -> prProbs . stateProbs)
|
||||||
,(strCI "opts", prOpts . stateOptions)
|
,(strCI "unpar", \_ -> prCanon . unparametrizeCanon . stateGrammarST)
|
||||||
,(strCI "words", unwords . stateGrammarWords)
|
,(strCI "subs", \_ -> prSubtermStat . stateGrammarST)
|
||||||
,(strCI "printnames", C.prPrintnamesGrammar . stateGrammarST)
|
|
||||||
,(strCI "stat", prStatistics . stateGrammarST)
|
|
||||||
,(strCI "probs", prProbs . stateProbs)
|
|
||||||
,(strCI "unpar", prCanon . unparametrizeCanon . stateGrammarST)
|
|
||||||
,(strCI "subs", prSubtermStat . stateGrammarST)
|
|
||||||
|
|
||||||
{- ----
|
{- ----
|
||||||
(strCI "gf", prt . st2grammar . stateGrammarST) -- DEFAULT
|
(strCI "gf", prt . st2grammar . stateGrammarST) -- DEFAULT
|
||||||
@@ -310,26 +301,26 @@ customGrammarPrinter =
|
|||||||
-- add your own grammar printers here
|
-- add your own grammar printers here
|
||||||
|
|
||||||
-- grammar conversions:
|
-- grammar conversions:
|
||||||
,(strCI "mcfg", Prt.prt . stateMCFG)
|
,(strCI "mcfg", \_ -> Prt.prt . stateMCFG)
|
||||||
,(strCI "cfg", Prt.prt . stateCFG)
|
,(strCI "cfg", \_ -> Prt.prt . stateCFG)
|
||||||
,(strCI "pinfo", Prt.prt . statePInfo)
|
,(strCI "pinfo", \_ -> Prt.prt . statePInfo)
|
||||||
,(strCI "abstract", Prt.prtAfter "\n" . Cnv.gfc2abstract . stateGrammarLang)
|
,(strCI "abstract", \_ -> Prt.prtAfter "\n" . Cnv.gfc2abstract . stateGrammarLang)
|
||||||
|
|
||||||
,(strCI "functiongraph",CnvTypeGraph.prtFunctionGraph . Cnv.gfc2simple noOptions . stateGrammarLang)
|
,(strCI "functiongraph",\_ -> CnvTypeGraph.prtFunctionGraph . Cnv.gfc2simple noOptions . stateGrammarLang)
|
||||||
,(strCI "typegraph", CnvTypeGraph.prtTypeGraph . Cnv.gfc2simple noOptions . stateGrammarLang)
|
,(strCI "typegraph", \_ -> CnvTypeGraph.prtTypeGraph . Cnv.gfc2simple noOptions . stateGrammarLang)
|
||||||
|
|
||||||
,(strCI "gfc-haskell", CnvHaskell.prtSGrammar . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
,(strCI "gfc-haskell", \_ -> CnvHaskell.prtSGrammar . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
||||||
,(strCI "mcfg-haskell", CnvHaskell.prtMGrammar . stateMCFG)
|
,(strCI "mcfg-haskell", \_ -> CnvHaskell.prtMGrammar . stateMCFG)
|
||||||
,(strCI "cfg-haskell", CnvHaskell.prtCGrammar . stateCFG)
|
,(strCI "cfg-haskell", \_ -> CnvHaskell.prtCGrammar . stateCFG)
|
||||||
,(strCI "gfc-prolog", CnvProlog.prtSGrammar . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
,(strCI "gfc-prolog", \_ -> CnvProlog.prtSGrammar . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
||||||
,(strCI "mcfg-prolog", CnvProlog.prtMGrammar . stateMCFG)
|
,(strCI "mcfg-prolog", \_ -> CnvProlog.prtMGrammar . stateMCFG)
|
||||||
,(strCI "cfg-prolog", CnvProlog.prtCGrammar . stateCFG)
|
,(strCI "cfg-prolog", \_ -> CnvProlog.prtCGrammar . stateCFG)
|
||||||
|
|
||||||
-- obsolete, or only for testing:
|
-- obsolete, or only for testing:
|
||||||
,(strCI "abs-skvatt", Cnv.abstract2skvatt . Cnv.gfc2abstract . stateGrammarLang)
|
,(strCI "abs-skvatt", \_ -> Cnv.abstract2skvatt . Cnv.gfc2abstract . stateGrammarLang)
|
||||||
,(strCI "cfg-skvatt", Cnv.cfg2skvatt . stateCFG)
|
,(strCI "cfg-skvatt", \_ -> Cnv.cfg2skvatt . stateCFG)
|
||||||
,(strCI "simple", Prt.prt . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
,(strCI "simple", \_ -> Prt.prt . uncurry Cnv.gfc2simple . stateGrammarLangOpts)
|
||||||
,(strCI "mcfg-erasing", Prt.prt . fst . snd . uncurry Cnv.convertGFC . stateGrammarLangOpts)
|
,(strCI "mcfg-erasing", \_ -> Prt.prt . fst . snd . uncurry Cnv.convertGFC . stateGrammarLangOpts)
|
||||||
-- ,(strCI "mcfg-old", PrtOld.prt . CnvOld.mcfg . statePInfoOld)
|
-- ,(strCI "mcfg-old", PrtOld.prt . CnvOld.mcfg . statePInfoOld)
|
||||||
-- ,(strCI "cfg-old", PrtOld.prt . CnvOld.cfg . statePInfoOld)
|
-- ,(strCI "cfg-old", PrtOld.prt . CnvOld.cfg . statePInfoOld)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ pg, print_grammar: pg
|
|||||||
flags:
|
flags:
|
||||||
-printer
|
-printer
|
||||||
-lang
|
-lang
|
||||||
|
-startcat -- The start category of the generated grammar.
|
||||||
|
Only supported by some grammar printers.
|
||||||
examples:
|
examples:
|
||||||
pg -printer=cf -- show the context-free skeleton
|
pg -printer=cf -- show the context-free skeleton
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user