Parse_AS.hs revision 10e8873de4a89035222d077fe80b9fd7b9631473
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{- Spickzettel f�r's Parsen
-- Definition aus Logic.hs
type ParseFun a = FilePath -> Int -> Int -> String -> (a,String,Int,Int)
-- args: filename, line, column, input text
-- result: value, remaining text, line, column
toParseFun :: GenParser Char st a -> st -> ParseFun a
-- Klassenfunktion, die meine Instanz implementiert
parse_basic_spec :: id -> Maybe(ParseFun basic_spec)
-- ^ R�ckgabetyp
-}
module Parse_AS where
import AnnoState
import Id
import Token
import Keywords
import Lexer
import AS_Modal
-- import AS_Annotation
-- import Maybe
import Common.Lib.Parsec
--import Formula
--import SortItem
--import OpItem
--import TypeItem
import ItemList
-- aus CASL, kann bleiben
basicSpec :: AParser BASIC_SPEC
basicSpec = (fmap Basic_spec $ many1 $
try $ annoParser basicItems)
<|> try (oBraceT >> cBraceT >> return (Basic_spec []))
basicItems :: AParser BASIC_ITEMS
basicItems = fmap Sig_items sigItems
<|> dotFormulae -- sp�ter!
sigItems :: AParser SIG_ITEMS
sigItems = propItems
propItem :: AParser PROP_ITEM
propItem = do s <- sortId ; -- Props are the same as sorts (in declaration)
commaPropDecl s
<|>
return (Prop_decl [s] [])
propItems :: AParser SIG_ITEMS
propItems = itemList propS propItem Prop_items
commaPropDecl :: Id -> AParser PROP_ITEM
commaPropDecl s = do c <- anComma
(is, cs) <- sortId `separatedBy` anComma
let l = s : is
p = tokPos c : map tokPos cs in return (Prop_decl l p)