{-# 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
    | KwGoto
    | KwIf
    | 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
    | CmtIndent
    | CmtStart
    | CmtStartBlock
    | CmtStartDoc
    | CmtSpdxCopyright
    | CmtSpdxLicense
    | CmtCode
    | CmtWord
    | CmtRef
    | CmtEnd

    | Error
    | Eof
    deriving (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, 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, (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, 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)

instance FromJSON LexemeClass
instance ToJSON LexemeClass