summaryrefslogtreecommitdiff
path: root/src/GF/Devel/Grammar/Lookup.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-06-25 16:43:48 +0000
committeraarne <aarne@cs.chalmers.se>2008-06-25 16:43:48 +0000
commitb96b36f43de3e2f8b58d5f539daa6f6d47f25870 (patch)
tree0992334be13cec6538a1dea22fbbf26ad6bdf224 /src/GF/Devel/Grammar/Lookup.hs
parentfe367412e0aeb4ad5c02de68e6eca382e0f96984 (diff)
removed src for 2.9
Diffstat (limited to 'src/GF/Devel/Grammar/Lookup.hs')
-rw-r--r--src/GF/Devel/Grammar/Lookup.hs168
1 files changed, 0 insertions, 168 deletions
diff --git a/src/GF/Devel/Grammar/Lookup.hs b/src/GF/Devel/Grammar/Lookup.hs
deleted file mode 100644
index 689996760..000000000
--- a/src/GF/Devel/Grammar/Lookup.hs
+++ /dev/null
@@ -1,168 +0,0 @@
-module GF.Devel.Grammar.Lookup where
-
-import GF.Devel.Grammar.Grammar
-import GF.Devel.Grammar.Construct
-import GF.Devel.Grammar.Macros
-import GF.Devel.Grammar.PrGF
-import GF.Infra.Ident
-
-import GF.Data.Operations
-
-import Control.Monad (liftM)
-import Data.Map
-import Data.List (sortBy) ----
-
--- look up fields for a constant in a grammar
-
-lookupJField :: (Judgement -> a) -> GF -> Ident -> Ident -> Err a
-lookupJField field gf m c = do
- j <- lookupJudgement gf m c
- return $ field j
-
-lookupJForm :: GF -> Ident -> Ident -> Err JudgementForm
-lookupJForm = lookupJField jform
-
--- the following don't (need to) check that the jment form is adequate
-
-lookupCatContext :: GF -> Ident -> Ident -> Err Context
-lookupCatContext gf m c = do
- ty <- lookupJField jtype gf m c
- return $ contextOfType ty
-
-lookupFunType :: GF -> Ident -> Ident -> Err Term
-lookupFunType = lookupJField jtype
-
-lookupLin :: GF -> Ident -> Ident -> Err Term
-lookupLin = lookupJField jdef
-
-lookupLincat :: GF -> Ident -> Ident -> Err Term
-lookupLincat = lookupJField jtype
-
-lookupOperType :: GF -> Ident -> Ident -> Err Term
-lookupOperType gr m c = do
- ju <- lookupJudgement gr m c
- case jform ju of
- JParam -> return typePType
- _ -> case jtype ju of
- Meta _ -> fail ("no type given to " ++ prIdent m ++ "." ++ prIdent c)
- ty -> return ty
----- can't be just lookupJField jtype
-
-lookupOperDef :: GF -> Ident -> Ident -> Err Term
-lookupOperDef = lookupJField jdef
-
-lookupOverload :: GF -> Ident -> Ident -> Err [([Type],(Type,Term))]
-lookupOverload gr m c = do
- tr <- lookupJField jdef gr m c
- case tr of
- Overload tysts -> return
- [(lmap snd args,(val,tr)) | (ty,tr) <- tysts, let (args,val) = prodForm ty]
- _ -> Bad $ prt c +++ "is not an overloaded operation"
-
-lookupParams :: GF -> Ident -> Ident -> Err [(Ident,Context)]
-lookupParams gf m c = do
- EParam _ ty <- lookupJField jdef gf m c
- return ty
-
-lookupParamConstructor :: GF -> Ident -> Ident -> Err Type
-lookupParamConstructor = lookupJField jtype
-
-lookupParamValues :: GF -> Ident -> Ident -> Err [Term]
-lookupParamValues gf m c = do
- ps <- lookupParams gf m c
- liftM concat $ mapM mkPar ps
- where
- mkPar (f,co) = do
- vs <- liftM combinations $ mapM (\ (_,ty) -> allParamValues gf ty) co
- return $ lmap (mkApp (QC m f)) vs
-
-lookupFlags :: GF -> Ident -> [(Ident,String)]
-lookupFlags gf m = errVal [] $ do
- mo <- lookupModule gf m
- return $ toList $ mflags mo
-
-allParamValues :: GF -> Type -> Err [Term]
-allParamValues cnc ptyp = case ptyp of
- App (Q (IC "Predef") (IC "Ints")) (EInt n) ->
- return [EInt i | i <- [0..n]]
- QC p c -> lookupParamValues cnc p c
- Q p c -> lookupParamValues cnc p c ----
-
- RecType r -> do
- let (ls,tys) = unzip $ sortByFst r
- tss <- mapM allPV tys
- return [R (zipAssign ls ts) | ts <- combinations tss]
- _ -> prtBad "cannot find parameter values for" ptyp
- where
- allPV = allParamValues cnc
- -- to normalize records and record types
- sortByFst = sortBy (\ x y -> compare (fst x) (fst y))
-
-abstractOfConcrete :: GF -> Ident -> Err Ident
-abstractOfConcrete gf m = do
- mo <- lookupModule gf m
- case mtype mo of
- MTConcrete a -> return a
- MTInstance a -> return a
- MTGrammar -> return m
- _ -> prtBad "not concrete module" m
-
-allOrigJudgements :: GF -> Ident -> [(Ident,Judgement)]
-allOrigJudgements gf m = errVal [] $ do
- mo <- lookupModule gf m
- return [ju | ju@(_,j) <- listJudgements mo, jform j /= JLink]
-
-allConcretes :: GF -> Ident -> [Ident]
-allConcretes gf m =
- [c | (c,mo) <- toList (gfmodules gf), mtype mo == MTConcrete m]
-
--- | select just those modules that a given one depends on, including itself
-partOfGrammar :: GF -> (Ident,Module) -> GF
-partOfGrammar gr (i,mo) = gr {
- gfmodules = fromList [m | m@(j,_) <- mos, elem j modsFor]
- }
- where
- mos = toList $ gfmodules gr
- modsFor = i : allDepsModule gr mo
-
-allDepsModule :: GF -> Module -> [Ident]
-allDepsModule gr m = iterFix add os0 where
- os0 = depPathModule m
- add os = [m | o <- os, Just n <- [llookup o mods], m <- depPathModule n]
- mods = toList $ gfmodules gr
-
--- | initial dependency list
-depPathModule :: Module -> [Ident]
-depPathModule mo = fors ++ lmap fst (mextends mo) ++ lmap snd (mopens mo) where
- fors = case mtype mo of
- MTConcrete i -> [i]
- MTInstance i -> [i]
- _ -> []
-
--- infrastructure for lookup
-
-lookupModule :: GF -> Ident -> Err Module
-lookupModule gf m = do
- maybe (raiseIdent "module not found:" m) return $ mlookup m (gfmodules gf)
-
--- this finds the immediate definition, which can be a link
-lookupIdent :: GF -> Ident -> Ident -> Err Judgement
-lookupIdent gf m c = do
- mo <- lookupModule gf m
- maybe (raiseIdent "constant not found:" c) return $ mlookup c (mjments mo)
-
--- this follows the link
-lookupJudgement :: GF -> Ident -> Ident -> Err Judgement
-lookupJudgement gf m c = do
- ju <- lookupIdent gf m c
- case jform ju of
- JLink -> lookupJudgement gf (jlink ju) c
- _ -> return ju
-
-mlookup = Data.Map.lookup
-
-raiseIdent msg i = raise (msg +++ prIdent i)
-
-lmap = Prelude.map
-llookup = Prelude.lookup
-