SortItem.hs revision 2eb84fc82d3ffa9116bc471fda3742bd9e5a24bb
bd6752910cc2da1faaf2da4d5d3de34b271bf6b7fielding
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive{- HetCATS/CASL/SortItem.hs
e942c741056732f50da2074b36fe59805d370650slive $Id$
5f5d1b4cc970b7f06ff8ef6526128e9a27303d88nd Authors: Christian Maeder
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd Year: 2002
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding parse SORT-ITEM and "sort/sorts SORT-ITEM ; ... ; SORT-ITEM"
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding http://www.cofi.info/Documents/CASL/Summary/
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding from 25 March 2001
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding C.2.1 Basic Specifications with Subsorts
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd-}
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndmodule CASL.SortItem where
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport Common.AnnoState
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport Common.Id
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport Common.Keywords
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport Common.Lexer
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport CASL.AS_Basic_CASL
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdndimport Common.AS_Annotation
7db9f691a00ead175b03335457ca296a33ddf31bndimport Common.Lib.Parsec
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37sliveimport Common.Token
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37sliveimport CASL.Formula
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37sliveimport CASL.ItemList
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive-- ------------------------------------------------------------------------
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive-- sortItem
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive-- ------------------------------------------------------------------------
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slivecommaSortDecl :: Id -> AParser SORT_ITEM
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slivecommaSortDecl s = do c <- anComma
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive (is, cs) <- sortId `separatedBy` anComma
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive let l = s : is
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive p = tokPos c : map tokPos cs in
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive subSortDecl (l, p) <|> return (Sort_decl l p)
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37sliveisoDecl :: Id -> AParser SORT_ITEM
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37sliveisoDecl s = do e <- equalT
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive subSortDefn (s, tokPos e)
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive <|>
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive (do (l, p) <- sortId `separatedBy` equalT
53bae66d3dc14a667e14a451f7bc65a893dd450fnd return (Iso_decl (s:l) (tokPos e : map tokPos p)))
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slivesubSortDefn :: (Id, Pos) -> AParser SORT_ITEM
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slivesubSortDefn (s, e) = do a <- annos
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive o <- oBraceT
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive v <- varId
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive c <- colonT
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive t <- sortId
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive d <- dotT -- or bar
97a9a944b5887e91042b019776c41d5dd74557aferikabele f <- formula
1597043cec6ad37fa4154bf09b0fccdabed1a239slive p <- cBraceT
1597043cec6ad37fa4154bf09b0fccdabed1a239slive return (Subsort_defn s v t (Annoted f [] a [])
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj (e:tokPos o:tokPos c:tokPos d:[tokPos p]))
984276e3760754bae346208618ad01194ddd4e73rbowen
97a9a944b5887e91042b019776c41d5dd74557aferikabelesubSortDecl :: ([Id], [Pos]) -> AParser SORT_ITEM
97a9a944b5887e91042b019776c41d5dd74557aferikabelesubSortDecl (l, p) = do t <- lessT
e6469ad7a7dacf318f7ecf393b448b83ad1fdb37slive s <- sortId
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj return (Subsort_decl l s (p++[tokPos t]))
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj
a5da9d9dfc593837aca771df70ad124a37e22abapatrikjsortItem :: AParser SORT_ITEM
98b409eae9ad8033008f8589b5c7c02ed49db767sctemmesortItem = do s <- sortId ;
f7489468254ddf807594db3dfb994035f0ec1c7djorton subSortDecl ([s],[])
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj <|>
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj commaSortDecl s
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj <|>
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj isoDecl s
08ff7ca3674b179f36b9e0798ae2a9bdbb72c437wrowe <|>
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj return (Sort_decl [s] [])
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj
a5da9d9dfc593837aca771df70ad124a37e22abapatrikjsortItems :: AParser SIG_ITEMS
a5da9d9dfc593837aca771df70ad124a37e22abapatrikjsortItems = itemList sortS sortItem Sort_items
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj
a5da9d9dfc593837aca771df70ad124a37e22abapatrikj