Subversion

Galculator

?curdirlinks? -

Blame information for rev 1

Line No. Rev Author Line
1 1 paulosilva  
2 {-# OPTIONS_GHC -Wall #-}
3  
4 -------------------------------------------------------------------------------
5  
6 {- |
7 Module      :  Language.Law.Parser
8 Description :  
9 Copyright   :  (c) Paulo Silva
10 License     :  LGPL
11  
12 Maintainer  :  paufil@di.uminho.pt
13 Stability   :  experimental
14 Portability :  portable
15  
16 <description of the module>
17 -}
18  
19 -------------------------------------------------------------------------------
20  
21 module Language.Law.Parser (
22   parser,
23   parseLaw
24  ) where
25  
26 import Control.Monad
27 import Language.Law.SyntaxADT
28 import qualified Language.R.Parser as R
29 --import Language.R.SyntaxADT
30 import Text.ParserCombinators.Parsec
31 import Text.ParserCombinators.Parsec.Language
32 import qualified Text.ParserCombinators.Parsec.Token as P
33  
34 -------------------------------------------------------------------------------
35  
36 type LawParser = Parser LawS
37  
38 -------------------------------------------------------------------------------
39  
40 reservNames :: [String]
41 reservNames = ["EQUIV", "IMPL"]
42  
43 lexer :: P.TokenParser st
44 lexer = P.makeTokenParser $ emptyDef { P.reservedNames = reservNames }
45  
46 -------------------------------------------------------------------------------
47  
48 reserved :: String -> CharParser st ()
49 reserved = P.reserved lexer
50  
51 whiteSpace :: CharParser st ()
52 whiteSpace = P.whiteSpace lexer
53  
54 identifier :: CharParser st String
55 identifier = P.identifier lexer
56  
57 -------------------------------------------------------------------------------
58  
59 parser :: String -> Either ParseError LawS
60 parser = parse mainLawParser ""
61  
62 -------------------------------------------------------------------------------
63  
64 mainLawParser :: LawParser
65 mainLawParser = do
66   whiteSpace
67   l <- parseLaw
68   eof
69   return l
70  
71 -------------------------------------------------------------------------------
72  
73 parseLaw :: LawParser
74 parseLaw =
75   parseEquiv <|>
76   parseImpl
77  
78 -------------------------------------------------------------------------------
79  
80 parseEquiv :: LawParser
81 parseEquiv = do
82   p <- getPosition
83   reserved "EQUIV"
84   ident <- identifier
85   r1 <- R.parseR
86   r2 <- R.parseR
87   return $ EquivS p ident r1 r2
88  
89 -------------------------------------------------------------------------------
90  
91 parseImpl :: LawParser
92 parseImpl = do
93   p <- getPosition
94   reserved "IMPL"
95   ident <- identifier
96   r1 <- R.parseR
97   r2 <- R.parseR
98   return $ ImplS p ident r1 r2
99  
100 -------------------------------------------------------------------------------
101  
102  
103  
104  

Theme by Vikram Singh | Powered by WebSVN v2.3.3