packages feed

ewe-0.1.0.43: src/Language/EWE/TokenUtils.hs

module Language.EWE.TokenUtils(ppTokens) where

import Text.PrettyPrint
import Language.EWE.Token(Tkns,Tkn(..),Tkn_(..))

ppTokens :: Tkns -> String
ppTokens tkns = render $ ppTkns tkns

ppTkns :: Tkns -> Doc
ppTkns = vcat.(map ppTkn)

ppTkn :: Tkn -> Doc
ppTkn (Tkn pos tkn) = ppTkn_ tkn <+> ppPos pos
    where ppPos (l,c) = text "at" <+> text "line:" <+> int l <+>
                        text "col:" <+> int c

ppTkn_ :: Tkn_ -> Doc
ppTkn_ (TknInt i)  = text "Int:"        <+> int i
ppTkn_ (TknStr s)  = text "String:"     <+> text s
ppTkn_ (TknId  s)  = text "Id:"         <+> text s
ppTkn_ (TknAssgn)  = text "Operator:"   <+> text ":="
ppTkn_ (TknColon)  = text "Operator:"   <+> text ":"
ppTkn_ (TknLPar)   = text "Separator:"  <+> text "("
ppTkn_ (TknRPar)   = text "Separator:"  <+> text ")"
ppTkn_ (TknLBrk)   = text "Separator:"  <+> text "["
ppTkn_ (TknRBrk)   = text "Separator:"  <+> text "]"
ppTkn_ (TknOper c) = text "Operator:"   <+> char c
ppTkn_ (TknCond s) = text "Coditional:" <+> text s
ppTkn_ (TknResWrd s) = text "Reserved Word:" <+> text s
ppTkn_ (TknEOL)    = text "<EOL>"
ppTkn_ (TknEOF)    = text "<EOF>"