{-# Language DeriveDataTypeable #-} module SableTokens where import Data.Data import Data.Dynamic import SableCC.ParserTypes (PToken,ParserTokenID(..)) data Machine = Machine deriving (Typeable,Data,Show) data IdentifierLiteral = IdentifierLiteral String deriving (Typeable,Data,Show) data DefLiteralPredicate = DefLiteralPredicate String deriving (Typeable,Data,Show) data DefLiteralSubstitution = DefLiteralSubstitution String deriving (Typeable,Data,Show) data StringBody = StringBody deriving (Typeable,Data,Show) data IntegerLiteral = IntegerLiteral Integer deriving (Typeable,Data,Show) fromToken :: Typeable t => PToken -> t fromToken token = fromDyn (tokenToDynamic token) (error "cannot create Token") tokenToDynamic :: PToken -> Dynamic tokenToDynamic token@(tokenID,tokenString) = case tokenID of (ParserTokenID 228) -> toDyn $ IdentifierLiteral tokenString (ParserTokenID 95) -> toDyn Machine (ParserTokenID 231) -> toDyn $ IntegerLiteral $ read tokenString _ -> error $ "fromToken : cannot handle token :"++ show token