{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData    #-}
module Language.Cimple.Tokens
    ( LexemeClass (..)
    ) where

import           Data.Aeson   (FromJSON, ToJSON)
import           GHC.Generics (Generic)

data LexemeClass
    = IdConst
    | IdFuncType
    | IdStdType
    | IdSueType
    | IdVar
    | KwBreak
    | KwCase
    | KwConst
    | KwContinue
    | KwDefault
    | KwDo
    | KwElse
    | KwEnum
    | KwExtern
    | KwFor
    | KwGnuPrintf
    | KwGoto
    | KwIf
    | KwNonNull
    | KwNullable
    | KwReturn
    | KwSizeof
    | KwStatic
    | KwStaticAssert
    | KwStruct
    | KwSwitch
    | KwTypedef
    | KwUnion
    | KwVla
    | KwVoid
    | KwWhile
    | LitFalse
    | LitTrue
    | LitChar
    | LitInteger
    | LitString
    | LitSysInclude
    | PctAmpersand
    | PctAmpersandAmpersand
    | PctAmpersandEq
    | PctArrow
    | PctAsterisk
    | PctAsteriskEq
    | PctCaret
    | PctCaretEq
    | PctColon
    | PctComma
    | PctEllipsis
    | PctEMark
    | PctEMarkEq
    | PctEq
    | PctEqEq
    | PctGreater
    | PctGreaterEq
    | PctGreaterGreater
    | PctGreaterGreaterEq
    | PctLBrace
    | PctLBrack
    | PctLess
    | PctLessEq
    | PctLessLess
    | PctLessLessEq
    | PctLParen
    | PctMinus
    | PctMinusEq
    | PctMinusMinus
    | PctPeriod
    | PctPercent
    | PctPercentEq
    | PctPipe
    | PctPipeEq
    | PctPipePipe
    | PctPlus
    | PctPlusEq
    | PctPlusPlus
    | PctQMark
    | PctRBrace
    | PctRBrack
    | PctRParen
    | PctSemicolon
    | PctSlash
    | PctSlashEq
    | PctTilde
    | PpDefine
    | PpDefined
    | PpElif
    | PpElse
    | PpEndif
    | PpIf
    | PpIfdef
    | PpIfndef
    | PpInclude
    | PpNewline
    | PpUndef
    | CmtBlock
    | CmtCommand
    | CmtAttr
    | CmtEndDocSection
    | CmtPrefix
    | CmtIndent
    | CmtStart
    | CmtStartBlock
    | CmtStartDoc
    | CmtStartDocSection
    | CmtSpdxCopyright
    | CmtSpdxLicense
    | CmtCode
    | CmtWord
    | CmtRef
    | CmtEnd
    | IgnStart
    | IgnBody
    | IgnEnd

    | ErrorToken
    | Eof
    deriving (Int -> LexemeClass
LexemeClass -> Int
LexemeClass -> [LexemeClass]
LexemeClass -> LexemeClass
LexemeClass -> LexemeClass -> [LexemeClass]
LexemeClass -> LexemeClass -> LexemeClass -> [LexemeClass]
(LexemeClass -> LexemeClass)
-> (LexemeClass -> LexemeClass)
-> (Int -> LexemeClass)
-> (LexemeClass -> Int)
-> (LexemeClass -> [LexemeClass])
-> (LexemeClass -> LexemeClass -> [LexemeClass])
-> (LexemeClass -> LexemeClass -> [LexemeClass])
-> (LexemeClass -> LexemeClass -> LexemeClass -> [LexemeClass])
-> Enum LexemeClass
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: LexemeClass -> LexemeClass -> LexemeClass -> [LexemeClass]
$cenumFromThenTo :: LexemeClass -> LexemeClass -> LexemeClass -> [LexemeClass]
enumFromTo :: LexemeClass -> LexemeClass -> [LexemeClass]
$cenumFromTo :: LexemeClass -> LexemeClass -> [LexemeClass]
enumFromThen :: LexemeClass -> LexemeClass -> [LexemeClass]
$cenumFromThen :: LexemeClass -> LexemeClass -> [LexemeClass]
enumFrom :: LexemeClass -> [LexemeClass]
$cenumFrom :: LexemeClass -> [LexemeClass]
fromEnum :: LexemeClass -> Int
$cfromEnum :: LexemeClass -> Int
toEnum :: Int -> LexemeClass
$ctoEnum :: Int -> LexemeClass
pred :: LexemeClass -> LexemeClass
$cpred :: LexemeClass -> LexemeClass
succ :: LexemeClass -> LexemeClass
$csucc :: LexemeClass -> LexemeClass
Enum, LexemeClass
LexemeClass -> LexemeClass -> Bounded LexemeClass
forall a. a -> a -> Bounded a
maxBound :: LexemeClass
$cmaxBound :: LexemeClass
minBound :: LexemeClass
$cminBound :: LexemeClass
Bounded, Eq LexemeClass
Eq LexemeClass
-> (LexemeClass -> LexemeClass -> Ordering)
-> (LexemeClass -> LexemeClass -> Bool)
-> (LexemeClass -> LexemeClass -> Bool)
-> (LexemeClass -> LexemeClass -> Bool)
-> (LexemeClass -> LexemeClass -> Bool)
-> (LexemeClass -> LexemeClass -> LexemeClass)
-> (LexemeClass -> LexemeClass -> LexemeClass)
-> Ord LexemeClass
LexemeClass -> LexemeClass -> Bool
LexemeClass -> LexemeClass -> Ordering
LexemeClass -> LexemeClass -> LexemeClass
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: LexemeClass -> LexemeClass -> LexemeClass
$cmin :: LexemeClass -> LexemeClass -> LexemeClass
max :: LexemeClass -> LexemeClass -> LexemeClass
$cmax :: LexemeClass -> LexemeClass -> LexemeClass
>= :: LexemeClass -> LexemeClass -> Bool
$c>= :: LexemeClass -> LexemeClass -> Bool
> :: LexemeClass -> LexemeClass -> Bool
$c> :: LexemeClass -> LexemeClass -> Bool
<= :: LexemeClass -> LexemeClass -> Bool
$c<= :: LexemeClass -> LexemeClass -> Bool
< :: LexemeClass -> LexemeClass -> Bool
$c< :: LexemeClass -> LexemeClass -> Bool
compare :: LexemeClass -> LexemeClass -> Ordering
$ccompare :: LexemeClass -> LexemeClass -> Ordering
$cp1Ord :: Eq LexemeClass
Ord, LexemeClass -> LexemeClass -> Bool
(LexemeClass -> LexemeClass -> Bool)
-> (LexemeClass -> LexemeClass -> Bool) -> Eq LexemeClass
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LexemeClass -> LexemeClass -> Bool
$c/= :: LexemeClass -> LexemeClass -> Bool
== :: LexemeClass -> LexemeClass -> Bool
$c== :: LexemeClass -> LexemeClass -> Bool
Eq, Int -> LexemeClass -> ShowS
[LexemeClass] -> ShowS
LexemeClass -> String
(Int -> LexemeClass -> ShowS)
-> (LexemeClass -> String)
-> ([LexemeClass] -> ShowS)
-> Show LexemeClass
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LexemeClass] -> ShowS
$cshowList :: [LexemeClass] -> ShowS
show :: LexemeClass -> String
$cshow :: LexemeClass -> String
showsPrec :: Int -> LexemeClass -> ShowS
$cshowsPrec :: Int -> LexemeClass -> ShowS
Show, (forall x. LexemeClass -> Rep LexemeClass x)
-> (forall x. Rep LexemeClass x -> LexemeClass)
-> Generic LexemeClass
forall x. Rep LexemeClass x -> LexemeClass
forall x. LexemeClass -> Rep LexemeClass x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LexemeClass x -> LexemeClass
$cfrom :: forall x. LexemeClass -> Rep LexemeClass x
Generic)

instance FromJSON LexemeClass
instance ToJSON LexemeClass