From 055c0d0d5a5bb0dc75904fe53df7f2e4f5732a8f Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 21 May 2008 09:26:44 +0000 Subject: GF/src is now for 2.9, and the new sources are in src-3.0 - keep it this way until the release of GF 3 --- src-3.0/GF/Canon/AbsToBNF.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src-3.0/GF/Canon/AbsToBNF.hs (limited to 'src-3.0/GF/Canon/AbsToBNF.hs') diff --git a/src-3.0/GF/Canon/AbsToBNF.hs b/src-3.0/GF/Canon/AbsToBNF.hs new file mode 100644 index 000000000..e30e836da --- /dev/null +++ b/src-3.0/GF/Canon/AbsToBNF.hs @@ -0,0 +1,38 @@ +module GF.Canon.AbsToBNF where + +import GF.Grammar.SGrammar +import GF.Data.Operations +import GF.Infra.Option +import GF.Canon.GFC (CanonGrammar) + +-- AR 10/5/2007 + +abstract2bnf :: CanonGrammar -> String +abstract2bnf = sgrammar2bnf . gr2sgr noOptions emptyProbs + +sgrammar2bnf :: SGrammar -> String +sgrammar2bnf = unlines . map (prBNFRule . mkBNF) . allRules + +prBNFRule :: BNFRule -> String +prBNFRule = id + +type BNFRule = String + +mkBNF :: SRule -> BNFRule +mkBNF (pfun,(args,cat)) = + fun ++ "." +++ gfId cat +++ "::=" +++ rhs +++ ";" + where + fun = gfId (snd pfun) + rhs = case args of + [] -> prQuotedString (snd pfun) + _ -> unwords (map gfId args) + +-- good for GF +gfId i = i + +-- good for BNFC +gfIdd i = case i of + "Int" -> "Integer" + "String" -> i + "Float" -> "Double" + _ -> "G" ++ i ++ "_" -- cgit v1.2.3