packages feed

SableCC2Hs-0.0.0.1: haskell/SableTokens.hs

{-# 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