diff options
| author | bringert <bringert@cs.chalmers.se> | 2007-01-08 17:50:24 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2007-01-08 17:50:24 +0000 |
| commit | 159f6515f7947ceb4adeba75d0d7242f732dd1a2 (patch) | |
| tree | 2110a19ec8c79a15c7fb4a6155039475594aed23 | |
| parent | 3978840d5ab7bc153b42ffc00e1ceb3788329aa3 (diff) | |
Sort rules in CFGM files by category and function.
| -rw-r--r-- | src/GF/CFGM/PrintCFGrammar.hs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/GF/CFGM/PrintCFGrammar.hs b/src/GF/CFGM/PrintCFGrammar.hs index 456bc1b19..a68d2325c 100644 --- a/src/GF/CFGM/PrintCFGrammar.hs +++ b/src/GF/CFGM/PrintCFGrammar.hs @@ -29,9 +29,10 @@ import qualified GF.CFGM.AbsCFG as AbsCFG import GF.Formalism.Utilities (Symbol(..)) import GF.Data.ErrM +import GF.Data.Utilities (compareBy) import qualified GF.Infra.Option as Option -import Data.List (intersperse) +import Data.List (intersperse, sortBy) import Data.Maybe (listToMaybe, maybeToList, maybe) import GF.Infra.Print @@ -68,8 +69,11 @@ prCFGrammarAsCFGM :: GT.CGrammar -> Ident -> Maybe String -> String prCFGrammarAsCFGM gr i start = PrintCFG.printTree $ cfGrammarToCFGM gr i start cfGrammarToCFGM :: GT.CGrammar -> Ident -> Maybe String -> AbsCFG.Grammar -cfGrammarToCFGM gr i start = AbsCFG.Grammar (identToCFGMIdent i) flags (map ruleToCFGMRule gr) +cfGrammarToCFGM gr i start = + AbsCFG.Grammar (identToCFGMIdent i) flags $ sortCFGMRules $ map ruleToCFGMRule gr where flags = maybe [] (\c -> [AbsCFG.StartCat $ strToCFGMCat (c++"{}.s")]) start + sortCFGMRules = sortBy (compareBy ruleKey) + ruleKey (AbsCFG.Rule f ps cat rhs) = (cat,f) ruleToCFGMRule :: GT.CRule -> AbsCFG.Rule ruleToCFGMRule (CFRule c rhs (GU.Name fun profile)) |
