~ubuntu-branches/ubuntu/utopic/haskell-uulib/utopic

« back to all changes in this revision

Viewing changes to src/UU/Scanner/TokenParser.hs

  • Committer: Bazaar Package Importer
  • Author(s): Arjan Oosting
  • Date: 2006-11-18 16:24:30 UTC
  • Revision ID: james.westby@ubuntu.com-20061118162430-24ddyj27kj0uk17v
Tags: upstream-0.9.2
ImportĀ upstreamĀ versionĀ 0.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
module UU.Scanner.TokenParser where
 
2
 
 
3
import UU.Parsing.Interface(IsParser(..))
 
4
import UU.Parsing.Derived(pListSep, pPacked)
 
5
import UU.Scanner.Position(Pos)
 
6
import UU.Scanner.GenTokenParser(pReserved, pValToken)
 
7
import UU.Scanner.Token(Token,EnumValToken(..))
 
8
 
 
9
-------------------------------------------------------------------------
 
10
-- IsParsers for  Symbols
 
11
-------------------------------------------------------------------------
 
12
 
 
13
pKeyPos           :: IsParser p Token => String -> p Pos
 
14
pKeyPos  keyword  =  pReserved keyword
 
15
 
 
16
 
 
17
pSpecPos          :: IsParser p Token => Char -> p Pos
 
18
pSpecPos s        =  pReserved [s]
 
19
 
 
20
pKey              :: IsParser p Token => String -> p String
 
21
pKey  key         =  key <$ pKeyPos key
 
22
 
 
23
pSpec             :: IsParser p Token => Char -> p String 
 
24
pSpec c           =  [c] <$ pSpecPos c
 
25
      
 
26
pStringPos, pCharPos,
 
27
  pInteger8Pos, pInteger10Pos, pInteger16Pos, pFractionPos,
 
28
  pVaridPos, pConidPos,
 
29
  pTextnmPos, pTextlnPos, pIntegerPos, pVarsymPos, pConsymPos  :: IsParser p Token => p (String,Pos)
 
30
 
 
31
pStringPos     =   pValToken TkString    ""        
 
32
pCharPos       =   pValToken TkChar      "\NUL"    
 
33
pInteger8Pos   =   pValToken TkInteger8  "0"       
 
34
pInteger10Pos  =   pValToken TkInteger10 "0"       
 
35
pInteger16Pos  =   pValToken TkInteger16 "0"
 
36
pFractionPos   =   pValToken TkFraction  "0.0"
 
37
pVaridPos      =   pValToken TkVarid     "<identifier>" 
 
38
pConidPos      =   pValToken TkConid     "<Identifier>" 
 
39
pConsymPos     =   pValToken TkConOp     "<conoperator>"
 
40
pVarsymPos     =   pValToken TkOp        "<operator>" 
 
41
pTextnmPos     =   pValToken TkTextnm    "<name>"       
 
42
pTextlnPos     =   pValToken TkTextln    "<line>"     
 
43
pIntegerPos    =   pInteger10Pos
 
44
 
 
45
pString, pChar,
 
46
  pInteger8, pInteger10, pInteger16, pFraction,
 
47
  pVarid, pConid,
 
48
  pTextnm, pTextln, pInteger, pVarsym, pConsym  :: IsParser p Token => p String
 
49
 
 
50
pString        = fst <$> pStringPos        
 
51
pChar          = fst <$> pCharPos          
 
52
pInteger8      = fst <$> pInteger8Pos      
 
53
pInteger10     = fst <$> pInteger10Pos     
 
54
pInteger16     = fst <$> pInteger16Pos     
 
55
pFraction      = fst <$> pFractionPos     
 
56
pVarid         = fst <$> pVaridPos         
 
57
pConid         = fst <$> pConidPos         
 
58
pVarsym        = fst <$> pVarsymPos  
 
59
pConsym        = fst <$> pConsymPos       
 
60
pTextnm        = fst <$> pTextnmPos       
 
61
pTextln        = fst <$> pTextlnPos            
 
62
pInteger       = fst <$> pIntegerPos       
 
63
  
 
64
pComma, pSemi, pOParen, pCParen, pOBrack, pCBrack, pOCurly, pCCurly
 
65
   :: IsParser p Token => p String
 
66
 
 
67
pComma  = pSpec ','
 
68
pSemi   = pSpec ';'
 
69
pOParen = pSpec '('
 
70
pCParen = pSpec ')'
 
71
pOBrack = pSpec '['
 
72
pCBrack = pSpec ']'
 
73
pOCurly = pSpec '{'
 
74
pCCurly = pSpec '}'
 
75
 
 
76
pCommaPos, pSemiPos, pOParenPos, pCParenPos, pOBrackPos, pCBrackPos, pOCurlyPos, pCCurlyPos
 
77
   :: IsParser p Token => p Pos
 
78
 
 
79
pCommaPos  = pSpecPos ','
 
80
pSemiPos   = pSpecPos ';'
 
81
pOParenPos = pSpecPos '('
 
82
pCParenPos = pSpecPos ')'
 
83
pOBrackPos = pSpecPos '['
 
84
pCBrackPos = pSpecPos ']'
 
85
pOCurlyPos = pSpecPos '{'
 
86
pCCurlyPos = pSpecPos '}'
 
87
 
 
88
pCommas ::  IsParser p Token => p a -> p [a]
 
89
pSemics ::  IsParser p Token => p a -> p [a]
 
90
pParens ::  IsParser p Token => p a -> p a
 
91
pBracks ::  IsParser p Token => p a -> p a
 
92
pCurly  ::  IsParser p Token => p a -> p a
 
93
 
 
94
pCommas  = pListSep pComma
 
95
pSemics  = pListSep pSemi
 
96
pParens  = pPacked pOParen pCParen
 
97
pBracks  = pPacked pOBrack pCBrack
 
98
pCurly   = pPacked pOCurly pCCurly
 
99
 
 
100
pParens_pCommas :: IsParser p Token => p a -> p [a]
 
101
pBracks_pCommas :: IsParser p Token => p a -> p [a]
 
102
pCurly_pSemics  :: IsParser p Token => p a -> p [a]
 
103
 
 
104
pParens_pCommas = pParens.pCommas
 
105
pBracks_pCommas = pBracks.pCommas
 
106
pCurly_pSemics  = pCurly .pSemics
 
107