scan.h
上传用户:lengbin
上传日期:2010-03-31
资源大小:121k
文件大小:5k
开发平台:

C/C++

  1. /*----------------------------------------------------------------------
  2.   File    : scan.h
  3.   Contents: scanner (lexical analysis of a character stream)
  4.   Author  : Christian Borgelt
  5.   History : 16.01.1996 file created
  6.             21.02.1996 definition of BUFSIZE made global
  7.             17.03.1996 special tokens for keywords removed
  8.             08.02.1998 recover and error message functions added
  9.             13.02.1998 token T_RGT (right arrow '->') added
  10.             04.03.1998 definitions of T_ID and T_NUM exchanged
  11.             17.04.1998 token T_LFT (left  arrow '<-') added
  12.             27.05.1998 token T_CMP (two char comparison operator) added
  13.             31.05.1998 field f removed from struct TOKVAL
  14.             23.11.2000 functions sc_len and sc_form added
  15.             15.07.2001 scanner made an object
  16. ----------------------------------------------------------------------*/
  17. #ifndef __SCAN__
  18. #define __SCAN__
  19. #include <stdio.h>
  20. /*----------------------------------------------------------------------
  21.   Preprocessor Definitions
  22. ----------------------------------------------------------------------*/
  23. /* --- sizes --- */
  24. #define SC_BUFSIZE  1024        /* size of scan buffer */
  25. #ifdef SC_SCAN
  26. /* --- tokens --- */
  27. #define T_EOF        256        /* end of file */
  28. #define T_NUM        257        /* number (floating point) */
  29. #define T_ID         258        /* identifier or string */
  30. #define T_RGT        259        /* right arrow '->' */
  31. #define T_LFT        260        /* left  arrow '<-' */
  32. #define T_CMP        261        /* two char. comparison, e.g. '<=' */
  33. /* --- error codes --- */
  34. #define E_NONE         0        /* no error */
  35. #define E_NOMEM      (-1)       /* not enough memory */
  36. #define E_FOPEN      (-2)       /* file open  failed */
  37. #define E_FREAD      (-3)       /* file read  failed */
  38. #define E_FWRITE     (-4)       /* file write failed (unused) */
  39. #define E_ILLCHR     (-5)       /* illegal character */
  40. #define E_BUFOVF     (-6)       /* scan buffer overflow */
  41. #define E_UNTSTR     (-7)       /* unterminated string */
  42. #define E_UNTCOM     (-8)       /* unterminated comment */
  43. #define E_STATE      (-9)       /* illegal scanner state */
  44. #define E_GARBAGE   (-10)       /* garbage at end of file */
  45. #endif
  46. /*----------------------------------------------------------------------
  47.   Type Definitions
  48. ----------------------------------------------------------------------*/
  49. #ifdef SC_SCAN
  50. typedef struct {                 /* --- scanner --- */
  51.   FILE       *file;              /* file to scan */
  52.   int        start;              /* start line of comment */
  53.   int        line,  pline;       /* input line of file */
  54.   int        token, ptoken;      /* token */
  55.   int        len,   plen;        /* length of token value */
  56.   int        back;               /* flag for backward step */
  57.   char       *value;             /* token value */
  58.   char       buf[2][SC_BUFSIZE]; /* scan buffers */
  59.   FILE       *errfile;           /* error output stream */
  60.   int        lncnt;              /* error message line count */
  61.   int        msgcnt;             /* number of add. error messages */
  62.   const char **msgs;             /* additional error messages */
  63.   char       fname[1];           /* name of file to scan */
  64. } SCAN;                          /* (scanner) */
  65. #endif
  66. /*----------------------------------------------------------------------
  67.   Functions
  68. ----------------------------------------------------------------------*/
  69. extern int         sc_fmtlen  (const char *s, int *len);
  70. extern int         sc_format  (char *dst, const char *src, int quotes);
  71. #ifdef SC_SCAN
  72. extern SCAN*       sc_create  (const char *fname);
  73. extern void        sc_delete  (SCAN *scan);
  74. extern const char* sc_fname   (SCAN *scan);
  75. extern int         sc_line    (SCAN *scan);
  76. extern int         sc_next    (SCAN *scan);
  77. extern int         sc_nexter  (SCAN *scan);
  78. extern int         sc_back    (SCAN *scan);
  79. extern int         sc_token   (SCAN *scan);
  80. extern const char* sc_value   (SCAN *scan);
  81. extern int         sc_len     (SCAN *scan);
  82. extern int         sc_eof     (SCAN *scan);
  83. extern int         sc_recover (SCAN *scan,
  84.                                int stop, int beg, int end, int level);
  85. extern void        sc_errfile (SCAN *scan, FILE *file, int lncnt);
  86. extern void        sc_errmsgs (SCAN *scan, const char *msgs[], int cnt);
  87. extern int         sc_error   (SCAN *scan, int code, ...);
  88. /*----------------------------------------------------------------------
  89.   Preprocessor Definitions
  90. ----------------------------------------------------------------------*/
  91. #define sc_fname(s)           ((const char*)(s)->fname)
  92. #define sc_line(s)            ((s)->line)
  93. #define sc_token(s)           ((s)->token)
  94. #define sc_value(s)           ((const char*)(s)->value)
  95. #define sc_len(s)             ((s)->len)
  96. #endif  /* #ifdef SC_SCAN */
  97. #endif