clex.h
上传用户:hbdengju
上传日期:2007-01-06
资源大小:11k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. #ifndef INCLUDED_CLEX
  2. #define INCLUDED_CLEX 1
  3. #ifndef INCLUDED_STDIO
  4. #include <stdio.h>
  5. #endif
  6. enum Boolean { FALSE, TRUE };
  7. #include "clex_sym.h"
  8. class Clex
  9.     { 
  10.  friend class Cparse;
  11.     enum Clex_mode
  12.         { CL_NONE=0, CL_COMMENT=1, CL_QUOTE=2, CL_POUND=4, CL_BRACK=8 };
  13.  protected:
  14.     short   look;           // a one-char lookahead
  15.     FILE*   fp;
  16.     Boolean block_brack;    // if TRUE, treat contents of "[]" as a string
  17.     long    line_num;       // line number in original source file
  18.     char    filename[256];  // name of original source file
  19.     short   bufsiz;         // number of chars currently in buf
  20.     char    buf[256];
  21.     void eat_one()          { look = short(getc(fp)); }
  22.     void put_in_buf(char c) { if (bufsiz < sizeof(buf)-1) buf[bufsiz++] = c; }
  23.     void buf_one()          { put_in_buf(look); eat_one(); }
  24.     Clex_sym terminate(Clex_sym s)  { buf[bufsiz] = ''; return s; }
  25.     Clex_sym eat_return(Clex_sym);
  26.     Clex_sym num(char);
  27.     Clex_sym ident(char);
  28.     Clex_sym lbrack(Clex_mode);
  29.     Clex_sym quote(char, Clex_sym, Clex_mode);
  30.     void block_comment(Clex_mode);
  31.     void line_comment();
  32.     void eoln(Clex_mode);
  33.     virtual Boolean pound(Clex_mode, char*, short len);
  34.  public:
  35.     Clex_sym    next();
  36.     const char* str()           { return buf; }
  37.     short       strlen()        { return bufsiz; }
  38.     long        line_no()       { return line_num; }
  39.     const char* fname()         { return filename; }
  40.     const char* debug(Clex_sym);
  41.     Clex(FILE*, Boolean block_brack);
  42.     };
  43. #endif