    --  C -> Haskell Compiler: Lexer for C Header Files
    --
    --  Author : Manuel M T Chakravarty, Duncan Coutts
    --  Created: 24 May 2005
    --
    --  Version $Revision: 1.1.2.1 $ from $Date: 2005/06/14 00:16:14 $
    --
    --  Copyright (c) [1999..2004] Manuel M T Chakravarty
    --  Copyright (c) 2005 Duncan Coutts
    --
    --  This file is free software; you can redistribute it and/or modify
    --  it under the terms of the GNU General Public License as published by
    --  the Free Software Foundation; either version 2 of the License, or
    --  (at your option) any later version.
    --
    --  This file is distributed in the hope that it will be useful,
    --  but WITHOUT ANY WARRANTY; without even the implied warranty of
    --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    --  GNU General Public License for more details.
    --
    --- DESCRIPTION ---------------------------------------------------------------
    --
    --  C Tokens for the C lexer.
    --

    module CTokens (CToken(..), GnuCTok(..)) where

    import Position  (Position(..), Pos(posOf))
    import Idents    (Ident, identToLexeme)

    -- token definition
    -- ----------------

    -- possible tokens (EXPORTED)
    --
    data CToken = CTokLParen   !Position            -- `('
                | CTokRParen   !Position            -- `)'
                | CTokLBracket !Position            -- `['
                | CTokRBracket !Position            -- `]'
                | CTokArrow    !Position            -- `->'
                | CTokDot      !Position            -- `.'
                | CTokExclam   !Position            -- `!'
                | CTokTilde    !Position            -- `~'
                | CTokInc      !Position            -- `++'
                | CTokDec      !Position            -- `--'
                | CTokPlus     !Position            -- `+'
                | CTokMinus    !Position            -- `-'
                | CTokStar     !Position            -- `*'
                | CTokSlash    !Position            -- `/'
                | CTokPercent  !Position            -- `%'
                | CTokAmper    !Position            -- `&'
                | CTokShiftL   !Position            -- `<<'
                | CTokShiftR   !Position            -- `>>'
                | CTokLess     !Position            -- `<'
                | CTokLessEq   !Position            -- `<='
                | CTokHigh     !Position            -- `>'
                | CTokHighEq   !Position            -- `>='
                | CTokEqual    !Position            -- `=='
                | CTokUnequal  !Position            -- `!='
                | CTokHat      !Position            -- `^'
                | CTokBar      !Position            -- `|'
                | CTokAnd      !Position            -- `&&'
                | CTokOr       !Position            -- `||'
                | CTokQuest    !Position            -- `?'
                | CTokColon    !Position            -- `:'
                | CTokAssign   !Position            -- `='
                | CTokPlusAss  !Position            -- `+='
                | CTokMinusAss !Position            -- `-='
                | CTokStarAss  !Position            -- `*='
                | CTokSlashAss !Position            -- `/='
                | CTokPercAss  !Position            -- `%='
                | CTokAmpAss   !Position            -- `&='
                | CTokHatAss   !Position            -- `^='
                | CTokBarAss   !Position            -- `|='
                | CTokSLAss    !Position            -- `<<='
                | CTokSRAss    !Position            -- `>>='
                | CTokComma    !Position            -- `,'
                | CTokSemic    !Position            -- `;'
                | CTokLBrace   !Position            -- `{'
                | CTokRBrace   !Position            --
                | CTokEllipsis !Position            -- `...'
                | CTokAlignof  !Position            -- `alignof'
                                                    -- (or `__alignof',
                                                    -- `__alignof__')
                | CTokAsm      !Position            -- `asm'
                                                    -- (or `__asm',
                                                    -- `__asm__')
                | CTokAuto     !Position            -- `auto'
                | CTokBreak    !Position            -- `break'
                | CTokBool     !Position            -- `_Bool'
                | CTokCase     !Position            -- `case'
                | CTokChar     !Position            -- `char'
                | CTokConst    !Position            -- `const'
                                                    -- (or `__const', `__const__')
                | CTokContinue !Position            -- `continue'
                | CTokComplex  !Position            -- `_Complex'
                | CTokDefault  !Position            -- `default'
                | CTokDo       !Position            -- `do'
                | CTokDouble   !Position            -- `double'
                | CTokElse     !Position            -- `else'
                | CTokEnum     !Position            -- `enum'
                | CTokExtern   !Position            -- `extern'
                | CTokFloat    !Position            -- `float'
                | CTokFloat128 !Position            -- `__float128'
                | CTokFor      !Position            -- `for'
                | CTokGoto     !Position            -- `goto'
                | CTokIf       !Position            -- `if'
                | CTokInline   !Position            -- `inline'
                                                    -- (or `__inline',
                                                    -- `__inline__')
                | CTokInt      !Position            -- `int'
                | CTokLong     !Position            -- `long'
                | CTokLabel    !Position            -- `__label__'
                | CTokRegister !Position            -- `register'
                | CTokRestrict !Position            -- `restrict'
                                                    -- (or `__restrict',
                                                    -- `__restrict__')
                | CTokReturn   !Position            -- `return'
                | CTokShort    !Position            -- `short'
                | CTokSigned   !Position            -- `signed'
                                                    -- (or `__signed',
                                                    -- `__signed__')
                | CTokSizeof   !Position            -- `sizeof'
                | CTokStatic   !Position            -- `static'
                | CTokStruct   !Position            -- `struct'
                | CTokSwitch   !Position            -- `switch'
                | CTokTypedef  !Position            -- `typedef'
                | CTokTypeof   !Position            -- `typeof'
                | CTokThread   !Position            -- `__thread'
                | CTokUnion    !Position            -- `union'
                | CTokUnsigned !Position            -- `unsigned'
                | CTokVoid     !Position            -- `void'
                | CTokVolatile !Position            -- `volatile'
                                                    -- (or `__volatile',
                                                    -- `__volatile__')
                | CTokWhile    !Position            -- `while'
                | CTokCLit     !Position !Char      -- character constant
                | CTokILit     !Position !Integer   -- integer constant
                | CTokFLit     !Position String     -- float constant
                | CTokSLit     !Position String     -- string constant (no escapes)
                | CTokIdent    !Position !Ident     -- identifier

                  -- not generated here, but in `CParser.parseCHeader'
                | CTokTyIdent  !Position !Ident     -- `typedef-name' identifier
                | CTokGnuC !GnuCTok !Position       -- special GNU C tokens
                | CTokEof                           -- end of file

    -- special tokens used in GNU C extensions to ANSI C
    --
    data GnuCTok = GnuCAttrTok              -- `__attribute__'
                 | GnuCExtTok               -- `__extension__'
                 | GnuCVaArg                -- `__builtin_va_arg'
                 | GnuCOffsetof             -- `__builtin_offsetof'
                 | GnuCTyCompat             -- `__builtin_types_compatible_p'

    instance Pos CToken where
      posOf :: CToken -> Position
    posOf (CTokLParen   Position
    pos  ) = Position
    pos
      posOf (CTokRParen   Position
    pos  ) = Position
    pos
      posOf (CTokLBracket Position
    pos  ) = Position
    pos
      posOf (CTokRBracket Position
    pos  ) = Position
    pos
      posOf (CTokArrow    Position
    pos  ) = Position
    pos
      posOf (CTokDot      Position
    pos  ) = Position
    pos
      posOf (CTokExclam   Position
    pos  ) = Position
    pos
      posOf (CTokTilde    Position
    pos  ) = Position
    pos
      posOf (CTokInc      Position
    pos  ) = Position
    pos
      posOf (CTokDec      Position
    pos  ) = Position
    pos
      posOf (CTokPlus     Position
    pos  ) = Position
    pos
      posOf (CTokMinus    Position
    pos  ) = Position
    pos
      posOf (CTokStar     Position
    pos  ) = Position
    pos
      posOf (CTokSlash    Position
    pos  ) = Position
    pos
      posOf (CTokPercent  Position
    pos  ) = Position
    pos
      posOf (CTokAmper    Position
    pos  ) = Position
    pos
      posOf (CTokShiftL   Position
    pos  ) = Position
    pos
      posOf (CTokShiftR   Position
    pos  ) = Position
    pos
      posOf (CTokLess     Position
    pos  ) = Position
    pos
      posOf (CTokLessEq   Position
    pos  ) = Position
    pos
      posOf (CTokHigh     Position
    pos  ) = Position
    pos
      posOf (CTokHighEq   Position
    pos  ) = Position
    pos
      posOf (CTokEqual    Position
    pos  ) = Position
    pos
      posOf (CTokUnequal  Position
    pos  ) = Position
    pos
      posOf (CTokHat      Position
    pos  ) = Position
    pos
      posOf (CTokBar      Position
    pos  ) = Position
    pos
      posOf (CTokAnd      Position
    pos  ) = Position
    pos
      posOf (CTokOr       Position
    pos  ) = Position
    pos
      posOf (CTokQuest    Position
    pos  ) = Position
    pos
      posOf (CTokColon    Position
    pos  ) = Position
    pos
      posOf (CTokAssign   Position
    pos  ) = Position
    pos
      posOf (CTokPlusAss  Position
    pos  ) = Position
    pos
      posOf (CTokMinusAss Position
    pos  ) = Position
    pos
      posOf (CTokStarAss  Position
    pos  ) = Position
    pos
      posOf (CTokSlashAss Position
    pos  ) = Position
    pos
      posOf (CTokPercAss  Position
    pos  ) = Position
    pos
      posOf (CTokAmpAss   Position
    pos  ) = Position
    pos
      posOf (CTokHatAss   Position
    pos  ) = Position
    pos
      posOf (CTokBarAss   Position
    pos  ) = Position
    pos
      posOf (CTokSLAss    Position
    pos  ) = Position
    pos
      posOf (CTokSRAss    Position
    pos  ) = Position
    pos
      posOf (CTokComma    Position
    pos  ) = Position
    pos
      posOf (CTokSemic    Position
    pos  ) = Position
    pos
      posOf (CTokLBrace   Position
    pos  ) = Position
    pos
      posOf (CTokRBrace   Position
    pos  ) = Position
    pos
      posOf (CTokEllipsis Position
    pos  ) = Position
    pos
      posOf (CTokAlignof  Position
    pos  ) = Position
    pos
      posOf (CTokAsm      Position
    pos  ) = Position
    pos
      posOf (CTokAuto     Position
    pos  ) = Position
    pos
      posOf (CTokBreak    Position
    pos  ) = Position
    pos
      posOf (CTokBool     Position
    pos  ) = Position
    pos
      posOf (CTokCase     Position
    pos  ) = Position
    pos
      posOf (CTokChar     Position
    pos  ) = Position
    pos
      posOf (CTokConst    Position
    pos  ) = Position
    pos
      posOf (CTokContinue Position
    pos  ) = Position
    pos
      posOf (CTokComplex  Position
    pos  ) = Position
    pos
      posOf (CTokDefault  Position
    pos  ) = Position
    pos
      posOf (CTokDo       Position
    pos  ) = Position
    pos
      posOf (CTokDouble   Position
    pos  ) = Position
    pos
      posOf (CTokElse     Position
    pos  ) = Position
    pos
      posOf (CTokEnum     Position
    pos  ) = Position
    pos
      posOf (CTokExtern   Position
    pos  ) = Position
    pos
      posOf (CTokFloat    Position
    pos  ) = Position
    pos
      posOf (CTokFloat128 Position
    pos  ) = Position
    pos
      posOf (CTokFor      Position
    pos  ) = Position
    pos
      posOf (CTokGoto     Position
    pos  ) = Position
    pos
      posOf (CTokInt      Position
    pos  ) = Position
    pos
      posOf (CTokInline   Position
    pos  ) = Position
    pos
      posOf (CTokIf       Position
    pos  ) = Position
    pos
      posOf (CTokLong     Position
    pos  ) = Position
    pos
      posOf (CTokLabel    Position
    pos  ) = Position
    pos
      posOf (CTokRegister Position
    pos  ) = Position
    pos
      posOf (CTokRestrict Position
    pos  ) = Position
    pos
      posOf (CTokReturn   Position
    pos  ) = Position
    pos
      posOf (CTokShort    Position
    pos  ) = Position
    pos
      posOf (CTokSigned   Position
    pos  ) = Position
    pos
      posOf (CTokSizeof   Position
    pos  ) = Position
    pos
      posOf (CTokStatic   Position
    pos  ) = Position
    pos
      posOf (CTokStruct   Position
    pos  ) = Position
    pos
      posOf (CTokSwitch   Position
    pos  ) = Position
    pos
      posOf (CTokTypedef  Position
    pos  ) = Position
    pos
      posOf (CTokTypeof   Position
    pos  ) = Position
    pos
      posOf (CTokThread   Position
    pos  ) = Position
    pos
      posOf (CTokUnion    Position
    pos  ) = Position
    pos
      posOf (CTokUnsigned Position
    pos  ) = Position
    pos
      posOf (CTokVoid     Position
    pos  ) = Position
    pos
      posOf (CTokVolatile Position
    pos  ) = Position
    pos
      posOf (CTokWhile    Position
    pos  ) = Position
    pos
      posOf (CTokCLit     Position
    pos Char
    _) = Position
    pos
      posOf (CTokILit     Position
    pos Integer
    _) = Position
    pos
      posOf (CTokFLit     Position
    pos String
    _) = Position
    pos
      posOf (CTokSLit     Position
    pos String
    _) = Position
    pos
      posOf (CTokIdent    Position
    pos Ident
    _) = Position
    pos
      posOf (CTokTyIdent  Position
    pos Ident
    _) = Position
    pos
      posOf (CTokGnuC   GnuCTok
    _ Position
    pos  ) = Position
    pos

    instance Show CToken where
      showsPrec :: Int -> CToken -> ShowS
    showsPrec Int
    _ (CTokLParen   Position
    _  ) = String -> ShowS
    showString String
    "("
      showsPrec Int
    _ (CTokRParen   Position
    _  ) = String -> ShowS
    showString String
    ")"
      showsPrec Int
    _ (CTokLBracket Position
    _  ) = String -> ShowS
    showString String
    "["
      showsPrec Int
    _ (CTokRBracket Position
    _  ) = String -> ShowS
    showString String
    "]"
      showsPrec Int
    _ (CTokArrow    Position
    _  ) = String -> ShowS
    showString String
    "->"
      showsPrec Int
    _ (CTokDot      Position
    _  ) = String -> ShowS
    showString String
    "."
      showsPrec Int
    _ (CTokExclam   Position
    _  ) = String -> ShowS
    showString String
    "!"
      showsPrec Int
    _ (CTokTilde    Position
    _  ) = String -> ShowS
    showString String
    "~"
      showsPrec Int
    _ (CTokInc      Position
    _  ) = String -> ShowS
    showString String
    "++"
      showsPrec Int
    _ (CTokDec      Position
    _  ) = String -> ShowS
    showString String
    "--"
      showsPrec Int
    _ (CTokPlus     Position
    _  ) = String -> ShowS
    showString String
    "+"
      showsPrec Int
    _ (CTokMinus    Position
    _  ) = String -> ShowS
    showString String
    "-"
      showsPrec Int
    _ (CTokStar     Position
    _  ) = String -> ShowS
    showString String
    "*"
      showsPrec Int
    _ (CTokSlash    Position
    _  ) = String -> ShowS
    showString String
    "/"
      showsPrec Int
    _ (CTokPercent  Position
    _  ) = String -> ShowS
    showString String
    "%"
      showsPrec Int
    _ (CTokAmper    Position
    _  ) = String -> ShowS
    showString String
    "&"
      showsPrec Int
    _ (CTokShiftL   Position
    _  ) = String -> ShowS
    showString String
    "<<"
      showsPrec Int
    _ (CTokShiftR   Position
    _  ) = String -> ShowS
    showString String
    ">>"
      showsPrec Int
    _ (CTokLess     Position
    _  ) = String -> ShowS
    showString String
    "<"
      showsPrec Int
    _ (CTokLessEq   Position
    _  ) = String -> ShowS
    showString String
    "<="
      showsPrec Int
    _ (CTokHigh     Position
    _  ) = String -> ShowS
    showString String
    ">"
      showsPrec Int
    _ (CTokHighEq   Position
    _  ) = String -> ShowS
    showString String
    ">="
      showsPrec Int
    _ (CTokEqual    Position
    _  ) = String -> ShowS
    showString String
    "=="
      showsPrec Int
    _ (CTokUnequal  Position
    _  ) = String -> ShowS
    showString String
    "!="
      showsPrec Int
    _ (CTokHat      Position
    _  ) = String -> ShowS
    showString String
    "^"
      showsPrec Int
    _ (CTokBar      Position
    _  ) = String -> ShowS
    showString String
    "|"
      showsPrec Int
    _ (CTokAnd      Position
    _  ) = String -> ShowS
    showString String
    "&&"
      showsPrec Int
    _ (CTokOr       Position
    _  ) = String -> ShowS
    showString String
    "||"
      showsPrec Int
    _ (CTokQuest    Position
    _  ) = String -> ShowS
    showString String
    "?"
      showsPrec Int
    _ (CTokColon    Position
    _  ) = String -> ShowS
    showString String
    ":"
      showsPrec Int
    _ (CTokAssign   Position
    _  ) = String -> ShowS
    showString String
    "="
      showsPrec Int
    _ (CTokPlusAss  Position
    _  ) = String -> ShowS
    showString String
    "+="
      showsPrec Int
    _ (CTokMinusAss Position
    _  ) = String -> ShowS
    showString String
    "-="
      showsPrec Int
    _ (CTokStarAss  Position
    _  ) = String -> ShowS
    showString String
    "*="
      showsPrec Int
    _ (CTokSlashAss Position
    _  ) = String -> ShowS
    showString String
    "/="
      showsPrec Int
    _ (CTokPercAss  Position
    _  ) = String -> ShowS
    showString String
    "%="
      showsPrec Int
    _ (CTokAmpAss   Position
    _  ) = String -> ShowS
    showString String
    "&="
      showsPrec Int
    _ (CTokHatAss   Position
    _  ) = String -> ShowS
    showString String
    "^="
      showsPrec Int
    _ (CTokBarAss   Position
    _  ) = String -> ShowS
    showString String
    "|="
      showsPrec Int
    _ (CTokSLAss    Position
    _  ) = String -> ShowS
    showString String
    "<<="
      showsPrec Int
    _ (CTokSRAss    Position
    _  ) = String -> ShowS
    showString String
    ">>="
      showsPrec Int
    _ (CTokComma    Position
    _  ) = String -> ShowS
    showString String
    ","
      showsPrec Int
    _ (CTokSemic    Position
    _  ) = String -> ShowS
    showString String
    ";"
      showsPrec Int
    _ (CTokLBrace   Position
    _  ) = String -> ShowS
    showString String
    "{"
      showsPrec Int
    _ (CTokRBrace   Position
    _  ) = String -> ShowS
    showString String
    "}"
      showsPrec Int
    _ (CTokEllipsis Position
    _  ) = String -> ShowS
    showString String
    "..."
      showsPrec Int
    _ (CTokAlignof  Position
    _  ) = String -> ShowS
    showString String
    "alignof"
      showsPrec Int
    _ (CTokAsm      Position
    _  ) = String -> ShowS
    showString String
    "asm"
      showsPrec Int
    _ (CTokAuto     Position
    _  ) = String -> ShowS
    showString String
    "auto"
      showsPrec Int
    _ (CTokBreak    Position
    _  ) = String -> ShowS
    showString String
    "break"
      showsPrec Int
    _ (CTokCase     Position
    _  ) = String -> ShowS
    showString String
    "case"
      showsPrec Int
    _ (CTokChar     Position
    _  ) = String -> ShowS
    showString String
    "char"
      showsPrec Int
    _ (CTokConst    Position
    _  ) = String -> ShowS
    showString String
    "const"
      showsPrec Int
    _ (CTokContinue Position
    _  ) = String -> ShowS
    showString String
    "continue"
      showsPrec Int
    _ (CTokDefault  Position
    _  ) = String -> ShowS
    showString String
    "default"
      showsPrec Int
    _ (CTokDouble   Position
    _  ) = String -> ShowS
    showString String
    "double"
      showsPrec Int
    _ (CTokDo       Position
    _  ) = String -> ShowS
    showString String
    "do"
      showsPrec Int
    _ (CTokElse     Position
    _  ) = String -> ShowS
    showString String
    "else"
      showsPrec Int
    _ (CTokEnum     Position
    _  ) = String -> ShowS
    showString String
    "enum"
      showsPrec Int
    _ (CTokExtern   Position
    _  ) = String -> ShowS
    showString String
    "extern"
      showsPrec Int
    _ (CTokFloat    Position
    _  ) = String -> ShowS
    showString String
    "float"
      showsPrec Int
    _ (CTokFloat128 Position
    _  ) = String -> ShowS
    showString String
    "__float128"
      showsPrec Int
    _ (CTokFor      Position
    _  ) = String -> ShowS
    showString String
    "for"
      showsPrec Int
    _ (CTokGoto     Position
    _  ) = String -> ShowS
    showString String
    "goto"
      showsPrec Int
    _ (CTokIf       Position
    _  ) = String -> ShowS
    showString String
    "if"
      showsPrec Int
    _ (CTokInline   Position
    _  ) = String -> ShowS
    showString String
    "inline"
      showsPrec Int
    _ (CTokInt      Position
    _  ) = String -> ShowS
    showString String
    "int"
      showsPrec Int
    _ (CTokLong     Position
    _  ) = String -> ShowS
    showString String
    "long"
      showsPrec Int
    _ (CTokLabel    Position
    _  ) = String -> ShowS
    showString String
    "__label__"
      showsPrec Int
    _ (CTokRegister Position
    _  ) = String -> ShowS
    showString String
    "register"
      showsPrec Int
    _ (CTokRestrict Position
    _  ) = String -> ShowS
    showString String
    "restrict"
      showsPrec Int
    _ (CTokReturn   Position
    _  ) = String -> ShowS
    showString String
    "return"
      showsPrec Int
    _ (CTokShort    Position
    _  ) = String -> ShowS
    showString String
    "short"
      showsPrec Int
    _ (CTokSigned   Position
    _  ) = String -> ShowS
    showString String
    "signed"
      showsPrec Int
    _ (CTokSizeof   Position
    _  ) = String -> ShowS
    showString String
    "sizeof"
      showsPrec Int
    _ (CTokStatic   Position
    _  ) = String -> ShowS
    showString String
    "static"
      showsPrec Int
    _ (CTokStruct   Position
    _  ) = String -> ShowS
    showString String
    "struct"
      showsPrec Int
    _ (CTokSwitch   Position
    _  ) = String -> ShowS
    showString String
    "switch"
      showsPrec Int
    _ (CTokTypedef  Position
    _  ) = String -> ShowS
    showString String
    "typedef"
      showsPrec Int
    _ (CTokTypeof   Position
    _  ) = String -> ShowS
    showString String
    "typeof"
      showsPrec Int
    _ (CTokThread   Position
    _  ) = String -> ShowS
    showString String
    "__thread"
      showsPrec Int
    _ (CTokUnion    Position
    _  ) = String -> ShowS
    showString String
    "union"
      showsPrec Int
    _ (CTokUnsigned Position
    _  ) = String -> ShowS
    showString String
    "unsigned"
      showsPrec Int
    _ (CTokVoid     Position
    _  ) = String -> ShowS
    showString String
    "void"
      showsPrec Int
    _ (CTokVolatile Position
    _  ) = String -> ShowS
    showString String
    "volatile"
      showsPrec Int
    _ (CTokWhile    Position
    _  ) = String -> ShowS
    showString String
    "while"
      showsPrec Int
    _ (CTokCLit     Position
    _ Char
    c) = Char -> ShowS
    showChar Char
    c
      showsPrec Int
    _ (CTokILit     Position
    _ Integer
    i) = (String -> ShowS
    showString (String -> ShowS) -> (Integer -> String) -> Integer -> ShowS
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Integer -> String
    forall a. Show a => a -> String
    show) Integer
    i
      showsPrec Int
    _ (CTokFLit     Position
    _ String
    s) = String -> ShowS
    showString String
    s
      showsPrec Int
    _ (CTokSLit     Position
    _ String
    s) = String -> ShowS
    showString String
    s
      showsPrec Int
    _ (CTokIdent    Position
    _ Ident
    i) = (String -> ShowS
    showString (String -> ShowS) -> (Ident -> String) -> Ident -> ShowS
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Ident -> String
    identToLexeme) Ident
    i
      showsPrec Int
    _ (CTokTyIdent  Position
    _ Ident
    i) = (String -> ShowS
    showString (String -> ShowS) -> (Ident -> String) -> Ident -> ShowS
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Ident -> String
    identToLexeme) Ident
    i
      showsPrec Int
    _ (CTokGnuC GnuCTok
    GnuCAttrTok Position
    _) = String -> ShowS
    showString String
    "__attribute__"
      showsPrec Int
    _ (CTokGnuC GnuCTok
    GnuCExtTok  Position
    _) = String -> ShowS
    showString String
    "__extension__"
      showsPrec Int
    _ (CTokGnuC GnuCTok
    GnuCVaArg    Position
    _) = String -> ShowS
    showString String
    "__builtin_va_arg"
      showsPrec Int
    _ (CTokGnuC GnuCTok
    GnuCOffsetof Position
    _) = String -> ShowS
    showString String
    "__builtin_offsetof"
      showsPrec Int
    _ (CTokGnuC GnuCTok
    GnuCTyCompat Position
    _) = String -> ShowS
    showString String
    "__builtin_types_compatible_p"