Symbol.hs revision af621d0066770895fd79562728e93099c8c52060
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederModule : $Header$
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian MaederCopyright : (c) Christian Maeder and Uni Bremen 2003
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicence : similar to LGPL, see HetCATS/LICENCE.txt or LIZENZ.txt
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill MossakowskiMaintainer : hets@tzi.de
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederStability : experimental
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederPortability : portable
08faa81d4dd8409cd923b334064f64f802ecc33dChristian Maeder HasCASL symbols for structured specs
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- * symbol data types
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederdata SymbItems = SymbItems SymbKind [Symb] [Annotation] [Pos]
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maeder -- pos: kind, commas
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder deriving (Show, Eq, Typeable)
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- | mapped symbols
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maederdata SymbMapItems = SymbMapItems SymbKind [SymbOrMap] [Annotation] [Pos]
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder -- pos: kind commas
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder deriving (Show, Eq, Typeable)
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- | kind of symbols
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maederdata SymbKind = Implicit | SK_type | SK_op | SK_class
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder deriving (Show, Eq, Ord)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- | type annotated symbols
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maederdata Symb = Symb Id (Maybe SymbType) [Pos]
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder -- pos: colon (or empty)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder deriving (Show, Eq)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- | type for symbols
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maederdata SymbType = SymbType TypeScheme
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder deriving (Show, Eq)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- | mapped symbol
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maederdata SymbOrMap = SymbOrMap Symb (Maybe Symb) [Pos]
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder -- pos: "|->" (or empty)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder deriving (Show, Eq)
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- * parsers for symbols
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- | parse a (typed) symbol
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maedersymb :: AParser Symb
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maedersymb = do i <- uninstOpId
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder t <- typeScheme
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder return (Symb i (Just $ SymbType t) [tokPos c])
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder do c <- qColonT
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder t <- parseType
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder return (Symb i (Just $ SymbType $ simpleTypeScheme $
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder LazyType t [tokPos c]) [tokPos c])
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder <|> return (Symb i Nothing [])
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- | parse a mapped symbol
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian MaedersymbMap :: AParser SymbOrMap
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian MaedersymbMap = do s <- symb
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder do f <- asKey mapsTo
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SymbOrMap s (Just t) [tokPos f])
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder <|> return (SymbOrMap s Nothing [])
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- | parse kind of symbols
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersymbKind :: AParser (SymbKind, Token)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersymbKind = try(
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do q <- pluralKeyword opS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SK_op, q)
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder do q <- pluralKeyword functS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SK_op, q)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do q <- pluralKeyword predS
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder return (SK_op, q)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do q <- pluralKeyword typeS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SK_type, q)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do q <- pluralKeyword sortS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SK_type, q)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do q <- asKey (classS ++ "es") <|> asKey classS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SK_class, q))
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- | parse symbol items
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersymbItems :: AParser SymbItems
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersymbItems = do s <- symb
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SymbItems Implicit [s] [] [])
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do (k, p) <- symbKind
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder (is, ps) <- symbs
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder return (SymbItems k is [] (map tokPos (p:ps)))
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maedersymbs :: AParser ([Symb], [Token])
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maedersymbs = do s <- symb
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do c <- anComma `followedWith` symb
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder (is, ps) <- symbs
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (s:is, c:ps)
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder <|> return ([s], [])
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder-- | parse symbol mappings
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian MaedersymbMapItems :: AParser SymbMapItems
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian MaedersymbMapItems =
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder do s <- symbMap
94ceeb2edbd25b4697ddd9f63c94377924352cf4Christian Maeder return (SymbMapItems Implicit [s] [] [])
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder do (k, p) <- symbKind
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maeder (is, ps) <- symbMaps
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder return (SymbMapItems k is [] (map tokPos (p:ps)))
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersymbMaps :: AParser ([SymbOrMap], [Token])
_ -> ptext (drop 3 $ show k) <> PP.space