#ifndef LEXC_H #define LEXC_H /* Gestion de tokens */ typedef enum { TOK_OPNPAR, TOK_CLSPAR, TOK_OPNBRACE, TOK_KEYWORD, TOK_ID , TOK_CTENUM ,TOK_CLSBRACE, TOK_OTHER, TOK_STRING, TOK_QUOTE, TOK_PTV ,TOK_VIRGULE, TOK_STAR, TOK_EOF, TOK_BIDON,TOK_OPNBRAK ,TOK_CLSBRAK, TOK_BINOPER, TOK_UNOPER,TOK_DOT3 ,TOK_2PT,TOK_SCOPE,TOK_PTR,TOK_PT,TOK_PRAGMA,TOK_TICTACTO ,TOK_PTR_MEMBER } TOK_TYPE; typedef enum { KEY_INT, KEY_CHAR, KEY_LONG, KEY_UNSIGNED, KEY_FLOAT, KEY_DOUBLE, KEY_VOID, KEY_STRUCT, KEY_TYPEDEF, KEY_UNION, KEY_ENUM, KEY_EXTERN, KEY_CONST,KEY_STATIC, KEY_EXPORT, KEY_FAR, KEY_NEAR, KEY_CLASS, KEY_PRIVATE,KEY_PROTECTED,KEY_PUBLIC,KEY_VIRTUAL,KEY_FOR,KEY_WHILE, KEY_DO,KEY_IF,KEY_SIGNED,KEY_VOLATILE,KEY_SIZEOF,KEY_SWITCH, KEY_CONTINUE,KEY_BREAK,KEY_RETURN,KEY_ELSE,KEY_GOTO,KEY_CASE, KEY_DEFAULT, KEY_SHORT, KEY_HUGE, KEY_CDECL, KEY_PASCAL, KEY_INTERRUPT, KEY_REGISTER,KEY_AUTO,KEY_OPERATOR,KEY__EXPORT,KEY_P_DEFVAL } KEYWORD; typedef enum { /* comparaison */ BINOPER_EGAL, BINOPER_DIFFER, BINOPER_GRAND, BINOPER_EGRAND, BINOPER_PETIT, BINOPER_EPETIT, /* logique et bits */ BINOPER_BITAND, BINOPER_BITOR, BINOPER_BOOLAND, BINOPER_BOOLOR, BINOPER_BITXOR, /* math‚matique */ BINOPER_PLUS, BINOPER_MOINS, BINOPER_FOIS, BINOPER_DIVIS, BINOPER_MODULO, BINOPER_SHIFTL, BINOPER_SHIFTR, /* Affectation */ BINOPER_AFFECT,BINOPER_AFF_PLUS,BINOPER_AFF_MOINS,BINOPER_AFF_FOIS, BINOPER_AFF_DIVIS,BINOPER_AFF_MODULO,BINOPER_AFF_BITAND, BINOPER_AFF_BITOR,BINOPER_AFF_BITXOR,BINOPER_AFF_SHIFTL, BINOPER_AFF_SHIFTR, /* ? : */ BINOPER_TRIEN } BINOPER; typedef enum { UNOPER_BOOLNOT, UNOPER_BITNOT, UNOPER_MOINS, UNOPER_PLUS, UNOPER_INCREM, UNOPER_DECREM } UNOPER; typedef enum { NUM_INT, NUM_INTL, NUM_HEXA, NUM_HEXAL, NUM_OCTAL, NUM_OCTALL, NUM_FLOAT } CTENUM; /* Sp‚cification pour TOK_ID , complŠt‚ par analyse s‚mantique */ typedef enum{ ID_NOTSET,ID_VAR,ID_FUNCT,ID_TYPE } IDTOK; typedef struct { int noline; int nocar; char *texte; } TOKCOM; #define TOKEN_SMALLTXT 3 typedef struct { TOK_TYPE type; union { KEYWORD keyword; CTENUM ctenum; BINOPER binoper; UNOPER unoper; IDTOK id; int other; } type2; char text[TOKEN_SMALLTXT+1]; /* text de un byte */ char *longtxt; /* si different de NULL, alors remplace text */ int noline; /* Num‚ro de la ligne d'o— provient le token */ /* en additionnant tout les includes */ int nocar; TOKCOM *comment; /* commentaire precedant le token */ } TOKEN; typedef struct _def_sym{ char *nomdef; char *repl; int lenrepl; char **tbprm; short nbprm; char active; struct _def_sym *nextsym; /* Prochain item dans las liste hashing ou -1 */ /* Pr‚vient l'utilisation r‚cursive d'une macro */ #if 0 int lastline; /* Num‚ro de la derniŠre ligne o— cette macro */ /* a ‚t‚ utilis‚e */ char *lastptl; /* position dans cette ligne o— la macro a ‚t‚ */ /* trait‚e */ #endif } DEF_SYM; #define MACRO_ACTIVE_CAR 0xff #define MACRO_DESACTIVE_CAR 0xfe #ifndef STDIO_H #include #endif #include "lexc.p" #endif