diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
| commit | b96b36f43de3e2f8b58d5f539daa6f6d47f25870 (patch) | |
| tree | 0992334be13cec6538a1dea22fbbf26ad6bdf224 /src/GF/CF/PPrCF.hs | |
| parent | fe367412e0aeb4ad5c02de68e6eca382e0f96984 (diff) | |
removed src for 2.9
Diffstat (limited to 'src/GF/CF/PPrCF.hs')
| -rw-r--r-- | src/GF/CF/PPrCF.hs | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/src/GF/CF/PPrCF.hs b/src/GF/CF/PPrCF.hs deleted file mode 100644 index 1c2203e94..000000000 --- a/src/GF/CF/PPrCF.hs +++ /dev/null @@ -1,102 +0,0 @@ ----------------------------------------------------------------------- --- | --- Module : PPrCF --- Maintainer : AR --- Stability : (stable) --- Portability : (portable) --- --- > CVS $Date: 2005/11/15 17:56:13 $ --- > CVS $Author: aarne $ --- > CVS $Revision: 1.13 $ --- --- printing and parsing CF grammars, rules, and trees AR 26/1/2000 -- 9/6/2003 --- --- use the Print class instead! ------------------------------------------------------------------------------ - -module GF.CF.PPrCF (prCF, prCFTree, prCFRule, prCFFun, prCFCat, prCFItem, prRegExp, pCF) where - -import GF.Data.Operations -import GF.CF.CF -import GF.CF.CFIdent -import GF.Canon.AbsGFC -import GF.Grammar.PrGrammar - -import Data.Char -import Data.List - -prCF :: CF -> String -prCF = unlines . (map prCFRule) . rulesOfCF -- hiding the literal recogn function - -prCFTree :: CFTree -> String -prCFTree (CFTree (fun, (_,trees))) = prCFFun fun ++ prs trees where - prs [] = "" - prs ts = " " ++ unwords (map ps ts) - ps t@(CFTree (_,(_,[]))) = prCFTree t - ps t = prParenth (prCFTree t) -{-# NOINLINE prCFTree #-} --- Workaround ghc 6.8.2 bug - - -prCFRule :: CFRule -> String -prCFRule (fun,(cat,its)) = - prCFFun fun ++ "." +++ prCFCat cat +++ "::=" +++ - unwords (map prCFItem its) +++ ";" - -prCFFun :: CFFun -> String -prCFFun = prCFFun' True ---- False -- print profiles for debug - -prCFFun' :: Bool -> CFFun -> String -prCFFun' profs (CFFun (t, p)) = prt_ t ++ pp p where - pp p = if (not profs || normal p) then "" else "_" ++ concat (map show p) - normal p = and [x==y && null b | ((b,x),y) <- zip p (map (:[]) [0..])] - -prCFCat :: CFCat -> String -prCFCat (CFCat (c,l)) = prt_ c ++ case prt_ l of - "s" -> [] - _ -> "-" ++ prt_ l ---- - -prCFItem :: CFItem -> String -prCFItem (CFNonterm c) = prCFCat c -prCFItem (CFTerm a) = prRegExp a - -prRegExp :: RegExp -> String -prRegExp (RegAlts tt) = case tt of - [t] -> prQuotedString t - _ -> prParenth (prTList " | " (map prQuotedString tt)) - --- rules have an amazingly easy parser, if we use the format --- fun. C -> item1 item2 ... where unquoted items are treated as cats --- Actually would be nice to add profiles to this. - -getCFRule :: String -> String -> Err [CFRule] -getCFRule mo s = getcf (wrds s) where - getcf ws = case ws of - fun : cat : a : its | isArrow a -> - Ok [(string2CFFun mo (init fun), - (string2CFCat mo cat, map mkIt its))] - cat : a : its | isArrow a -> - Ok [(string2CFFun mo (mkFun cat it), - (string2CFCat mo cat, map mkIt it)) | it <- chunk its] - _ -> Bad (" invalid rule:" +++ s) - isArrow a = elem a ["->", "::="] - mkIt w = case w of - ('"':w@(_:_)) -> atomCFTerm (string2CFTok (init w)) - _ -> CFNonterm (string2CFCat mo w) - chunk its = case its of - [] -> [[]] - _ -> chunks "|" its - mkFun cat its = case its of - [] -> cat ++ "_" - _ -> concat $ intersperse "_" (cat : map clean its) -- CLE style - clean = filter isAlphaNum -- to form valid identifiers - wrds = takeWhile (/= ";") . words -- to permit semicolon in the end - -pCF :: String -> String -> Err [CFRule] -pCF mo s = do - rules <- mapM (getCFRule mo) $ filter isRule $ lines s - return $ concat rules - where - isRule line = case dropWhile isSpace line of - '-':'-':_ -> False - _ -> not $ all isSpace line |
