/*
 * TOKENS - This file contains the initialized tables of text, token pairs for
 * all the C language symbols and keywords, and the mapped value for YACC
 * and inline assembler.
 *
 * IMPORTANT : this MUST be in the same order as the %token list in grammar.y
 *
 */
/* token        TEXT             MAPPED TO       IL OPCODE       ASM TOKEN */

DAT(L_NOTOKEN,  L"newline",      L_NOTOKEN,      MAX_OPCODE,     ML_NL)
DAT(L_IDENT,    L"identifier",   L_IDENT,        OPname,         ML_IDENT)
DAT(L_STRING,   L"string",       L_STRING,       OPconstant,     ML_NOTOKEN)
DAT(L_CFLOAT,   L"float constant", L_CONSTANT,   OPconstant,     ML_NOTOKEN)
DAT(L_CDOUBLE,  L"double constant", L_CONSTANT,  OPconstant,     ML_NOTOKEN)
DAT(L_CLDOUBLE, L"long double constant",L_CONSTANT, OPconstant,  ML_NOTOKEN)
DAT(L_CINTEGER, L"int constant", L_CONSTANT,     OPconstant,     ML_CONSTANT)
DAT(L_LONGINT,  L"long constant", L_CONSTANT,    OPconstant,     ML_CONSTANT)
DAT(L_CUNSIGNED,L"unsigned int constant",L_CONSTANT,OPconstant,  ML_CONSTANT)
DAT(L_LONGUNSIGNED,L"unsigned long constant",L_CONSTANT,OPconstant,ML_CONSTANT)
DAT(L_AUTO,     L"auto",         L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_STATIC,   L"static",       L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_EXTERN,   L"extern",       L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_REGISTER, L"register",     L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_TYPEDEF,  L"typedef",      L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_FORTRAN,  Fortran_str,     L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_PASCAL,   Pascal_str,      L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_C,        Cdecl_str,       L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_INTERRUPT,L"interrupt",    L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_SAVEREGS, L"saveregs",     L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_LOADDS,   L"loadds",       L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_EXPORT,   L"export",       L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_ASM,      L"_asm",         L_ASM,          MAX_OPCODE,     ML_NL)
DAT(L_NEAR,     L"near",         L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_FAR,      L"far",          L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_HUGE,     L"huge",         L_MODIFIER,     MAX_OPCODE,     ML_IDENT)
DAT(L_CONST,    L"const",        L_MODIFIER,     MAX_OPCODE,     ML_CDATATYPE)
DAT(L_VOLATILE, L"volatile",     L_MODIFIER,     MAX_OPCODE,     ML_CDATATYPE)
DAT(L_CHAR,     L"char",         L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_INT,      L"int",          L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_FLOAT,    L"float",        L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_DOUBLE,   L"double",       L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_SHORT,    L"short",        L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_LONG,     L"long",         L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_VOID,     L"void",         L_TYPE,         MAX_OPCODE,     ML_IDENT)
DAT(L_SIGNED,   L"signed",       L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_UNSIGNED, L"unsigned",     L_TYPE,         MAX_OPCODE,     ML_CDATATYPE)
DAT(L_ENUM,     L"enum",         L_ENUM,         MAX_OPCODE,     ML_IDENT)
DAT(L_ENUM_TAG, L"enum tag",     L_ENUM_TAG,     MAX_OPCODE,     ML_NOTOKEN)
DAT(L_STRUCT,   L"struct",       L_STRUCT,       MAX_OPCODE,     ML_IDENT)
DAT(L_STRUCT_TAG,L"struct tag",  L_STRUCT_TAG,   MAX_OPCODE,     ML_NOTOKEN)
DAT(L_UNION,    L"union",        L_UNION,        MAX_OPCODE,     ML_IDENT)
DAT(L_UNION_TAG,L"union tag",    L_UNION_TAG,    MAX_OPCODE,     ML_NOTOKEN)
DAT(L_AND,      L"&",            L_AND,          OPband,         ML_AND)
DAT(L_ANDAND,   L"&&",           L_ANDAND,       OPandif,        ML_NOTOKEN)
DAT(L_ANDEQ,    L"&=",           L_ASOP,         OPandeq,        ML_NOTOKEN)
DAT(L_ASSIGN,   L"=",            L_ASSIGN,       OPassign,       ML_NOTOKEN)
DAT(L_BIT,      L"bit field",    L_BIT,          OPbit,          ML_NOTOKEN)
DAT(L_COLON,    L":",            L_COLON,        OPcolon,        ML_COLON)
DAT(L_COMMA,    L",",            L_COMMA,        OPcomma,        ML_COMMA)
DAT(L_DECR,     L"--",           L_INCOP,        OPpostdecr,     ML_NOTOKEN)
DAT(L_DIV,      L"/",            L_DIVOP,        OPdiv,          ML_DIV)
DAT(L_DIVEQ,    L"/=",           L_ASOP,         OPdiveq,        ML_NOTOKEN)
DAT(L_EQUALS,   L"==",           L_EQUOP,        OPeq,           ML_EQ)
DAT(L_EXCLAIM,  L"!",            L_EXCLAIM,      OPnot,          ML_NOTOKEN)
DAT(L_EXTRACT,  L"*",            L_EXTRACT,      OPextract,      ML_NOTOKEN)
DAT(L_GT,       L">",            L_RELOP,        OPgt,           ML_GT)
DAT(L_GTEQ,     L">=",           L_RELOP,        OPge,           ML_GE)
DAT(L_INCR,     L"++",           L_INCOP,        OPpostincr,     ML_NOTOKEN)
DAT(L_LBRACK,   L"[",            L_LBRACK,       OPindex,        ML_LBRACK)
DAT(L_LSHFTEQ,  L"<<=",          L_ASOP,         OPlsheq,        ML_NOTOKEN)
DAT(L_LSHIFT,   L"<<",           L_SHIFTOP,      OPlshift,       ML_SHL)
DAT(L_LT,       L"<",            L_RELOP,        OPlt,           ML_LT)
DAT(L_LTEQ,     L"<=",           L_RELOP,        OPle,           ML_LE)
DAT(L_MINUS,    L"-",            L_MINUS,        OPminus,        ML_SUB)
DAT(L_MINUSEQ,  L"-=",           L_ASOP,         OPminuseq,      ML_NOTOKEN)
DAT(L_MOD,      L"%",            L_DIVOP,        OPrem,          ML_MOD)
DAT(L_MODEQ,    L"%=",           L_ASOP,         OPremeq,        ML_NOTOKEN)
DAT(L_MULT,     L"*",            L_MULT,         OPmult,         ML_MUL)
DAT(L_MULTEQ,   L"*=",           L_ASOP,         OPmulteq,       ML_NOTOKEN)
DAT(L_NOTEQ,    L"!=",           L_EQUOP,        OPne,           ML_NE)
DAT(L_OR,       L"|",            L_OR,           OPbor,          ML_OR)
DAT(L_OREQ,     L"|=",           L_ASOP,         OPoreq,         ML_NOTOKEN)
DAT(L_OROR,     L"||",           L_OROR,         OPorelse,       ML_NOTOKEN)
DAT(L_PERIOD,   L".",            L_STUNOP,       OPfield,        ML_PERIOD)
DAT(L_PLUS,     L"+",            L_PLUS,         OPplus,         ML_ADD)
DAT(L_PLUSEQ,   L"+=",           L_ASOP,         OPpluseq,       ML_NOTOKEN)
DAT(L_POINTSTO, L"->",           L_STUNOP,       OPfield,        ML_NOTOKEN)
DAT(L_PREDECR,  L"--",           L_INCOP,        OPminuseq,      ML_NOTOKEN)
DAT(L_PREINCR,  L"++",           L_INCOP,        OPpluseq,       ML_NOTOKEN)
DAT(L_QUEST,    L"?",            L_QUEST,        OPquestion,     ML_NOTOKEN)
DAT(L_RSHFTEQ,  L">>=",          L_ASOP,         OPrsheq,        ML_NOTOKEN)
DAT(L_RSHIFT,   L">>",           L_SHIFTOP,      OPrshift,       ML_SHR)
DAT(L_TILDE,    L"~",            L_TILDE,        OPcompl,        ML_NOT)
DAT(L_UMINUS,   L"unary minus",  L_UMINUS,       OPneg,          ML_NOTOKEN)
DAT(L_XOR,      L"^",            L_XOR,          OPxor,          ML_XOR)
DAT(L_XOREQ,    L"^=",           L_ASOP,         OPxoreq,        ML_NOTOKEN)
DAT(L_ARG,      L"argument",     L_ARG,          OPargument,     ML_NOTOKEN)
DAT(L_ASOP,     L"assign op",    L_ASOP,         MAX_OPCODE,     ML_NOTOKEN)
DAT(L_BREAK,    L"break",        L_BREAK,        MAX_OPCODE,     ML_IDENT)
DAT(L_CASE,     L"case",         L_CASE,         OPcase,         ML_IDENT)
DAT(L_CAST,     L"cast",         L_CAST,         OPcast,         ML_NOTOKEN)
DAT(L_CLASS,    L"storage class",L_CLASS,        MAX_OPCODE,     ML_IDENT)
DAT(L_CONSTANT, L"constant",     L_CONSTANT,     MAX_OPCODE,     ML_MAPPED)
DAT(L_CONTINUE, L"continue",     L_CONTINUE,     MAX_OPCODE,     ML_IDENT)
DAT(L_DEFAULT,  L"default",      L_DEFAULT,      MAX_OPCODE,     ML_IDENT)
DAT(L_DIVOP,    L"div op",       L_DIVOP,        MAX_OPCODE,     ML_MAPPED)
DAT(L_DO,       L"do",           L_DO,           MAX_OPCODE,     ML_IDENT)
DAT(L_ELLIPSIS, L"...",          L_ELLIPSIS,     MAX_OPCODE,     ML_NOTOKEN)
DAT(L_ELSE,     L"else",         L_ELSE,         MAX_OPCODE,     ML_IDENT)
DAT(L_ENTRY,    L"entry",        L_ENTRY,        OPentry,        ML_NOTOKEN)
DAT(L_EOF,      L"end of file",  0,              MAX_OPCODE,     ML_EOF)
DAT(L_EQUOP,    L"equ op",       L_EQUOP,        MAX_OPCODE,     ML_NOTOKEN)
DAT(L_FILE,     0,               L_FILE,         MAX_OPCODE,     ML_NOTOKEN)
DAT(L_FOR,      L"for",          L_FOR,          MAX_OPCODE,     ML_IDENT)
DAT(L_FUNCTION, L"argument",     L_FUNCTION,     MAX_OPCODE,     ML_NOTOKEN)
DAT(L_GOTO,     L"goto",         L_GOTO,         MAX_OPCODE,     ML_IDENT)
DAT(L_IF,       L"if",           L_IF,           MAX_OPCODE,     ML_IDENT)
DAT(L_INCOP,    L"incr op",      L_INCOP,        MAX_OPCODE,     ML_NOTOKEN)
DAT(L_INIT,     L"initializing", L_INIT,         MAX_OPCODE,     ML_NOTOKEN)
DAT(L_LCURLY,   L"{",            L_LCURLY,       MAX_OPCODE,     ML_LCURLY)
DAT(L_LINE,     L"line",         L_LINE,         MAX_OPCODE,     ML_NOTOKEN)
DAT(L_LPAREN,   L"(",            L_LPAREN,       OPfunction,     ML_LPAREN)
DAT(L_INTRINSIC,L"intrinsic",    L_INTRINSIC,    OPintrinsic,    ML_NOTOKEN)
DAT(L_MODIFIER, L"modifier",     L_MODIFIER,     MAX_OPCODE,     ML_MAPPED)
DAT(L_MODULE,   L"module",       L_MODULE,       MAX_OPCODE,     ML_NOTOKEN)
DAT(L_RBRACK,   L"]",            L_RBRACK,       MAX_OPCODE,     ML_RBRACK)
DAT(L_RCURLY,   L"}",            L_RCURLY,       MAX_OPCODE,     ML_NL)
DAT(L_RELOP,    L"rel op",       L_RELOP,        MAX_OPCODE,     ML_MAPPED)
DAT(L_RETURN,   L"return",       L_RETURN,       MAX_OPCODE,     ML_IDENT)
DAT(L_RPAREN,   L")",            L_RPAREN,       MAX_OPCODE,     ML_RPAREN)
DAT(L_SELF,     L"_self",        L_SELF,         OPself,         ML_IDENT)
DAT(L_SEMI,     L";",            L_SEMI,         MAX_OPCODE,     ML_SEMI)
DAT(L_SHIFTOP,  L"shift op",     L_SHIFTOP,      MAX_OPCODE,     ML_MAPPED)
DAT(L_SIZEOF,   L"sizeof",       L_SIZEOF,       MAX_OPCODE,     ML_IDENT)
DAT(L_STUNOP,   L"struct op",    L_STUNOP,       MAX_OPCODE,     ML_MAPPED)
DAT(L_SW,       L"switch",       L_SW,           OPswitch,       ML_IDENT)
DAT(L_SWEXP,    0,               L_SWEXP,        OPswexp,        ML_NOTOKEN)
DAT(L_TYPE,     L"type",         L_TYPE,         MAX_OPCODE,     ML_MAPPED)
DAT(L_TYPENAME, L"typedef name", L_TYPENAME,     MAX_OPCODE,     ML_CTYPENAME)
DAT(L_UPLUS,    L"unary plus",   L_UPLUS,        OPparen,        ML_NOTOKEN)
DAT(L_WHILE,    L"while",        L_WHILE,        MAX_OPCODE,     ML_IDENT)
DAT(0,          0,               0,              MAX_OPCODE,     ML_NOTOKEN)
