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

C/C++

  1. /*----------------------------------------------------------------------
  2.   File    : parse.h
  3.   Contents: parser utilities
  4.   Author  : Christian Borgelt
  5.   History : 12.08.2004 file created
  6. ----------------------------------------------------------------------*/
  7. #ifndef __PARSE__
  8. #define __PARSE__
  9. #ifndef SC_SCAN
  10. #define SC_SCAN
  11. #endif
  12. #include "scan.h"
  13. /*----------------------------------------------------------------------
  14.   Preprocessor Definitions
  15. ----------------------------------------------------------------------*/
  16. /* --- error codes --- */
  17. #define E_CHREXP    (-16)       /* character expected */
  18. #define E_STREXP    (-17)       /* string expected */
  19. #define E_NUMEXP    (-18)       /* number expected */
  20. #define E_ILLNUM    (-19)       /* illegal number */
  21. #define E_ATTEXP    (-20)       /* attribute expected */
  22. #define E_UNKATT    (-21)       /* unknown attribute */
  23. #define E_DUPATT    (-22)       /* duplicate attribute value */
  24. #define E_MISATT    (-23)       /* missing attribute */
  25. #define E_ILLATT    (-24)       /* illegal attribute */
  26. #define E_ATTYPE    (-25)       /* wrong attribute type */
  27. #define E_VALEXP    (-26)       /* attribute value expected */
  28. #define E_UNKVAL    (-27)       /* unknown attribute value */
  29. #define E_DUPVAL    (-28)       /* duplicate attribute value */
  30. #define E_MISVAL    (-29)       /* missing attribute value */
  31. #define E_CLSEXP    (-30)       /* class value expected */
  32. #define E_UNKCLS    (-31)       /* unknown class value */
  33. #define E_DUPCLS    (-32)       /* duplicate class value */
  34. #define E_MISCLS    (-33)       /* missing class value */
  35. #define E_CLSTYPE   (-34)       /* class attribute must be symbolic */
  36. #define E_CLSCNT    (-35)       /* class attribute has too few values */
  37. #define E_DOMAIN    (-36)       /* illegal attribute domain */
  38. #define E_PAREXP    (-37)       /* parameter expected */
  39. #define E_ILLOP     (-38)       /* illegal comparison operator */
  40. #define E_ILLMAT    (-39)       /* illegal covariance matrix */
  41. #define E_DUPCDL    (-40)       /* duplicate candidate list */
  42. #define E_RANGE     (-41)       /* illegal candidate range */
  43. #define E_ILLCDD    (-42)       /* illegal candidate */
  44. #define E_ILLINK    (-43)       /* illegal link */
  45. #define E_LYRCNT    (-44)       /* illegal number of layers */
  46. #define E_UNITCNT   (-45)       /* illegal number of units */
  47. /*----------------------------------------------------------------------
  48.   Functions
  49. ----------------------------------------------------------------------*/
  50. extern void pa_init  (SCAN *scan);
  51. extern int  pa_error (SCAN *scan, int code, int c, const char *s);
  52. /*----------------------------------------------------------------------
  53.   Preprocessor Definitions
  54. ----------------------------------------------------------------------*/
  55. #define ERROR(c)    return pa_error(scan, c,        -1, NULL)
  56. #define XERROR(c,s) return pa_error(scan, c,        -1, s)
  57. #define ERR_CHR(c)  return pa_error(scan, E_CHREXP,  c, NULL)
  58. #define ERR_STR(s)  return pa_error(scan, E_STREXP, -1, s)
  59. #define GET_TOK()   if (sc_next(scan) < 0) 
  60.                       return sc_error(scan, sc_token(scan))
  61. #define GET_CHR(c)  if (sc_token(scan) != (c)) ERR_CHR(c); 
  62.                       else GET_TOK()
  63. #define RECOVER()   if (sc_recover(scan, ';', '{', '}', 0) == T_EOF) 
  64.                       return 1
  65. #endif