language-c-0.3.0: src/Language/C/Syntax/Ops.hs
{-# LANGUAGE DeriveDataTypeable #-}
-----------------------------------------------------------------------------
-- |
-- Module : Language.C.Syntax.Ops
-- Copyright : (c) 2008 Benedikt Huber
-- License : BSD-style
-- Maintainer : benedikt.huber@gmail.com
-- Stability : experimental
-- Portability : ghc
--
-- Unary, binary and asssignment operators. Exported via AST.
-----------------------------------------------------------------------------
module Language.C.Syntax.Ops (
-- * Assignment operators
CAssignOp(..),
-- * Unary operators
CUnaryOp(..),
-- * Binary operators
CBinaryOp(..),
)
where
import Data.Generics
-- | C assignment operators (K&R A7.17)
data CAssignOp = CAssignOp
| CMulAssOp
| CDivAssOp
| CRmdAssOp -- ^ remainder and assignment
| CAddAssOp
| CSubAssOp
| CShlAssOp
| CShrAssOp
| CAndAssOp
| CXorAssOp
| COrAssOp
deriving (Eq, Ord,Data,Typeable)
instance Show CAssignOp where
show CAssignOp = "="
show CMulAssOp = "*="
show CDivAssOp = "/="
show CRmdAssOp = "%="
show CAddAssOp = "+="
show CSubAssOp = "-="
show CShlAssOp = "<<="
show CShrAssOp = ">>="
show CAndAssOp = "&="
show CXorAssOp = "^="
show COrAssOp = "|="
-- | C binary operators (K&R A7.6-15)
--
data CBinaryOp = CMulOp
| CDivOp
| CRmdOp -- ^ remainder of division
| CAddOp
| CSubOp
| CShlOp -- ^ shift left
| CShrOp -- ^ shift right
| CLeOp -- ^ less
| CGrOp -- ^ greater
| CLeqOp -- ^ less or equal
| CGeqOp -- ^ greater or equal
| CEqOp -- ^ equal
| CNeqOp -- ^ not equal
| CAndOp -- ^ bitwise and
| CXorOp -- ^ exclusive bitwise or
| COrOp -- ^ inclusive bitwise or
| CLndOp -- ^ logical and
| CLorOp -- ^ logical or
deriving (Eq,Ord,Data,Typeable)
instance Show CBinaryOp where
show CMulOp = "*"
show CDivOp = "/"
show CRmdOp = "%"
show CAddOp = "+"
show CSubOp = "-"
show CShlOp = "<<"
show CShrOp = ">>"
show CLeOp = "<"
show CGrOp = ">"
show CLeqOp = "<="
show CGeqOp = ">="
show CEqOp = "=="
show CNeqOp = "!="
show CAndOp = "&"
show CXorOp = "^"
show COrOp = "|"
show CLndOp = "&&"
show CLorOp = "||"
-- | C unary operator (K&R A7.3-4)
--
data CUnaryOp = CPreIncOp -- ^ prefix increment operator
| CPreDecOp -- ^ prefix decrement operator
| CPostIncOp -- ^ postfix increment operator
| CPostDecOp -- ^ postfix decrement operator
| CAdrOp -- ^ address operator
| CIndOp -- ^ indirection operator
| CPlusOp -- ^ prefix plus
| CMinOp -- ^ prefix minus
| CCompOp -- ^ one's complement
| CNegOp -- ^ logical negation
deriving (Eq,Ord,Data,Typeable)
instance Show CUnaryOp where
show CPreIncOp = "++"
show CPreDecOp = "--"
show CPostIncOp = "++"
show CPostDecOp = "--"
show CAdrOp = "&"
show CIndOp = "*"
show CPlusOp = "+"
show CMinOp = "-"
show CCompOp = "~"
show CNegOp = "!"