module UHC.Light.Compiler.Scanner.TokenParser
where
import UU.Parsing.Interface (IsParser (..))
import UU.Parsing.Derived (pListSep,pPacked)
import UU.Scanner.Position (Pos)
import UU.Scanner.GenTokenParser
import UHC.Light.Compiler.Scanner.Token
pHsValToken :: IsParser p Token => EnumValToken -> String -> p (String,Pos)
pHsValToken t s = valTokenStringRes <$> pValToken t [s]
pHsCostValToken' :: IsParser p Token => Int -> EnumValToken -> String -> p Token
pHsCostValToken' c tp val = pCostValToken' c tp [val]
valTokenStringRes :: (ValTokenVal,Pos) -> (String,Pos)
valTokenStringRes (l,p) = (concat l,p)
pKeyPos :: IsParser p Token => String -> p Pos
pKeyPos keyword = pReserved keyword
pSpecPos :: IsParser p Token => Char -> p Pos
pSpecPos s = pReserved [s]
pKey :: IsParser p Token => String -> p String
pKey key = key <$ pKeyPos key
pSpec :: IsParser p Token => Char -> p String
pSpec c = [c] <$ pSpecPos c
pStringPos, pCharPos,
pInteger8Pos, pInteger10Pos, pInteger16Pos, pFractionPos,
pVaridPos, pConidPos, pVarsymPos, pConsymPos,
pTextnmPos, pTextlnPos, pIntegerPos :: IsParser p Token => p (String,Pos)
pStringPos = pHsValToken TkString ""
pCharPos = pHsValToken TkChar "\NUL"
pInteger8Pos = pHsValToken TkInteger8 "0"
pInteger10Pos = pHsValToken TkInteger10 "0"
pInteger16Pos = pHsValToken TkInteger16 "0"
pFractionPos = pHsValToken TkFraction "0.0"
pVaridPos = pHsValToken TkVarid "<identifier>"
pConidPos = pHsValToken TkConid "<Identifier>"
pConsymPos = pHsValToken TkConOp "<conoperator>"
pVarsymPos = pHsValToken TkOp "<operator>"
pTextnmPos = pHsValToken TkTextnm "<name>"
pTextlnPos = pHsValToken TkTextln "<line>"
pIntegerPos = pInteger10Pos
pString, pChar,
pInteger8, pInteger10, pInteger16, pFraction,
pVarid, pConid, pVarsym, pConsym,
pTextnm, pTextln, pInteger :: IsParser p Token => p String
pString = fst <$> pStringPos
pChar = fst <$> pCharPos
pInteger8 = fst <$> pInteger8Pos
pInteger10 = fst <$> pInteger10Pos
pInteger16 = fst <$> pInteger16Pos
pFraction = fst <$> pFractionPos
pVarid = fst <$> pVaridPos
pConid = fst <$> pConidPos
pVarsym = fst <$> pVarsymPos
pConsym = fst <$> pConsymPos
pTextnm = fst <$> pTextnmPos
pTextln = fst <$> pTextlnPos
pInteger = fst <$> pIntegerPos
pComma, pSemi, pOParen, pCParen, pOBrack, pCBrack, pOCurly, pCCurly
:: IsParser p Token => p String
pComma = pSpec ','
pSemi = pSpec ';'
pOParen = pSpec '('
pCParen = pSpec ')'
pOBrack = pSpec '['
pCBrack = pSpec ']'
pOCurly = pSpec '{'
pCCurly = pSpec '}'
pCommaPos, pSemiPos, pOParenPos, pCParenPos, pOBrackPos, pCBrackPos, pOCurlyPos, pCCurlyPos
:: IsParser p Token => p Pos
pCommaPos = pSpecPos ','
pSemiPos = pSpecPos ';'
pOParenPos = pSpecPos '('
pCParenPos = pSpecPos ')'
pOBrackPos = pSpecPos '['
pCBrackPos = pSpecPos ']'
pOCurlyPos = pSpecPos '{'
pCCurlyPos = pSpecPos '}'
pCommas :: IsParser p Token => p a -> p [a]
pSemics :: IsParser p Token => p a -> p [a]
pParens :: IsParser p Token => p a -> p a
pBracks :: IsParser p Token => p a -> p a
pCurly :: IsParser p Token => p a -> p a
pCommas = pListSep pComma
pSemics = pListSep pSemi
pParens = pPacked pOParen pCParen
pBracks = pPacked pOBrack pCBrack
pCurly = pPacked pOCurly pCCurly
pParens_pCommas :: IsParser p Token => p a -> p [a]
pBracks_pCommas :: IsParser p Token => p a -> p [a]
pCurly_pSemics :: IsParser p Token => p a -> p [a]
pParens_pCommas = pParens.pCommas
pBracks_pCommas = pBracks.pCommas
pCurly_pSemics = pCurly .pSemics