1
module UU.Scanner.TokenParser where
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(..))
9
-------------------------------------------------------------------------
10
-- IsParsers for Symbols
11
-------------------------------------------------------------------------
13
pKeyPos :: IsParser p Token => String -> p Pos
14
pKeyPos keyword = pReserved keyword
17
pSpecPos :: IsParser p Token => Char -> p Pos
18
pSpecPos s = pReserved [s]
20
pKey :: IsParser p Token => String -> p String
21
pKey key = key <$ pKeyPos key
23
pSpec :: IsParser p Token => Char -> p String
24
pSpec c = [c] <$ pSpecPos c
27
pInteger8Pos, pInteger10Pos, pInteger16Pos, pFractionPos,
29
pTextnmPos, pTextlnPos, pIntegerPos, pVarsymPos, pConsymPos :: IsParser p Token => p (String,Pos)
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
46
pInteger8, pInteger10, pInteger16, pFraction,
48
pTextnm, pTextln, pInteger, pVarsym, pConsym :: IsParser p Token => p String
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
64
pComma, pSemi, pOParen, pCParen, pOBrack, pCBrack, pOCurly, pCCurly
65
:: IsParser p Token => p String
76
pCommaPos, pSemiPos, pOParenPos, pCParenPos, pOBrackPos, pCBrackPos, pOCurlyPos, pCCurlyPos
77
:: IsParser p Token => p Pos
79
pCommaPos = pSpecPos ','
80
pSemiPos = pSpecPos ';'
81
pOParenPos = pSpecPos '('
82
pCParenPos = pSpecPos ')'
83
pOBrackPos = pSpecPos '['
84
pCBrackPos = pSpecPos ']'
85
pOCurlyPos = pSpecPos '{'
86
pCCurlyPos = pSpecPos '}'
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
94
pCommas = pListSep pComma
95
pSemics = pListSep pSemi
96
pParens = pPacked pOParen pCParen
97
pBracks = pPacked pOBrack pCBrack
98
pCurly = pPacked pOCurly pCCurly
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]
104
pParens_pCommas = pParens.pCommas
105
pBracks_pCommas = pBracks.pCommas
106
pCurly_pSemics = pCurly .pSemics