----------------------------------------------------------------------------- -- | -- Module : Parser.Token -- Description : Tokens generated by the lexer -- Maintainer : coskuacay@gmail.com -- Stability : experimental ----------------------------------------------------------------------------- module Parser.Token ( Token (..) , Lexeme (..) , token ) where import Parser.Location (SrcSpan, Located(..)) import Text.PrettyPrint import Text.PrettyPrint.HughesPJClass (Pretty (..), prettyShow) data Token = TType String | TIdent String | TColon | TAs | TEof deriving (Eq, Ord) data Lexeme = Lexeme SrcSpan Token token :: Lexeme -> Token token (Lexeme _ t) = t instance Located Lexeme where location (Lexeme s _) = s ---------------------------------------------------------------------------- -- * Printing ---------------------------------------------------------------------------- instance Pretty Token where pPrint (TType t) = text "type" <> parens (text t) pPrint (TIdent id) = text "identifier" <> parens (text id) pPrint TColon = text ":" pPrint TAs = text "as" pPrint TEof = text "" instance Pretty Lexeme where pPrint (Lexeme loc token) = pPrint token <+> text "at" <+> pPrint loc ---------------------------------------------------------------------------- -- * Showing ---------------------------------------------------------------------------- instance Show Token where show = prettyShow instance Show Lexeme where show = prettyShow