Line No. | Rev | Author | Line |
---|---|---|---|
1 | 20 | paulosilva | {-# OPTIONS_GHC -Wall #-} |
2 | |||
3 | ------------------------------------------------------------------------------- | ||
4 | |||
5 | {- | | ||
6 | Module : Text.ParserCombinators.Parsec.Utils | ||
7 | Description : Useful functions for parsing. | ||
8 | Copyright : (c) Paulo Silva | ||
9 | License : LGPL | ||
10 | |||
11 | Maintainer : paufil@di.uminho.pt | ||
12 | Stability : experimental | ||
13 | Portability : portable | ||
14 | |||
15 | -} | ||
16 | |||
17 | ------------------------------------------------------------------------------- | ||
18 | |||
19 | module Text.ParserCombinators.Parsec.Utils ( | ||
20 | binary, | ||
21 | prefix, | ||
22 | postfix, | ||
23 | wrapper, | ||
24 | parseIdentifier, | ||
25 | parseConst | ||
26 | ) where | ||
27 | |||
28 | import Text.ParserCombinators.Parsec | ||
29 | import qualified Text.ParserCombinators.Parsec.Token as P | ||
30 | import Text.ParserCombinators.Parsec.Expr | ||
31 | |||
32 | ------------------------------------------------------------------------------- | ||
33 | |||
34 | binary :: P.TokenParser st -> String -> (a -> a -> a) -> Assoc -> Operator Char st a | ||
35 | binary lexer name fun assoc = Infix (do {P.reservedOp lexer name; return fun}) assoc | ||
36 | |||
37 | ------------------------------------------------------------------------------- | ||
38 | |||
39 | prefix :: P.TokenParser st -> String -> (a -> a) -> Operator Char st a | ||
40 | prefix lexer name fun = Prefix (do {P.reserved lexer name; return fun}) | ||
41 | |||
42 | ------------------------------------------------------------------------------- | ||
43 | |||
44 | postfix :: P.TokenParser st -> String -> (a -> a) -> Operator Char st a | ||
45 | postfix lexer name fun = Postfix (do {P.reserved lexer name; return fun}) | ||
46 | |||
47 | ------------------------------------------------------------------------------- | ||
48 | |||
49 | wrapper :: P.TokenParser st -> GenParser Char st t -> GenParser Char st t | ||
50 | wrapper lexer prs = do | ||
51 | P.whiteSpace lexer | ||
52 | t <- prs | ||
53 | eof | ||
54 | return t | ||
55 | |||
56 | ------------------------------------------------------------------------------- | ||
57 | |||
58 | parseIdentifier :: P.TokenParser st -> (String -> a) -> GenParser Char st a | ||
59 | parseIdentifier lexer fun = do | ||
60 | tid <- P.identifier lexer | ||
61 | return $ fun tid | ||
62 | |||
63 | ------------------------------------------------------------------------------- | ||
64 | |||
65 | parseConst :: P.TokenParser st -> String -> a -> GenParser Char st a | ||
66 | parseConst lexer name fun = do | ||
67 | P.reserved lexer name | ||
68 | return fun | ||
69 | |||
70 | ------------------------------------------------------------------------------- | ||
71 | |||
72 |