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

编译器/解释器

开发平台:

Others

  1. #ifndef SList_h
  2. #define SList_h
  3. /*
  4.  * SList.h
  5.  *
  6.  * SOFTWARE RIGHTS
  7.  *
  8.  * We reserve no LEGAL rights to SORCERER -- SORCERER is in the public
  9.  * domain.  An individual or company may do whatever they wish with
  10.  * source code distributed with SORCERER or the code generated by
  11.  * SORCERER, including the incorporation of SORCERER, or its output, into
  12.  * commerical software.
  13.  *
  14.  * We encourage users to develop software with SORCERER.  However, we do
  15.  * ask that credit is given to us for developing SORCERER.  By "credit",
  16.  * we mean that if you incorporate our source code into one of your
  17.  * programs (commercial product, research project, or otherwise) that you
  18.  * acknowledge this fact somewhere in the documentation, research report,
  19.  * etc...  If you like SORCERER and have developed a nice tool with the
  20.  * output, please mention that you developed it using SORCERER.  In
  21.  * addition, we ask that this header remain intact in our source code.
  22.  * As long as these guidelines are kept, we expect to continue enhancing
  23.  * this system and expect to make other tools available as they are
  24.  * completed.
  25.  *
  26.  * PCCTS 1.33
  27.  * Terence Parr
  28.  * Parr Research Corporation
  29.  * with Purdue University and AHPCRC, University of Minnesota
  30.  * 1992-1998
  31.  */
  32. #include "pcctscfg.h"
  33. #include PCCTS_STDIO_H
  34. #include PCCTS_STDLIB_H
  35. PCCTS_NAMESPACE_STD
  36. #include "PCCTSAST.h"
  37. class PCCTS_AST;
  38. class SListNode {
  39. protected:
  40. void *_elem; /* pointer to any kind of element */
  41. SListNode *_next;
  42. public:
  43. SListNode() {_elem=_next=NULL;}
  44. virtual ~SListNode() {_elem=_next=NULL;}
  45. void *elem() { return _elem; }
  46. void setElem(void *e) { _elem = e; }
  47. void setNext(SListNode *t) { _next = t; }
  48. SListNode *next() { return _next; }
  49. };
  50. class SList {
  51. SListNode *head, *tail;
  52. public:
  53. SList() {head=tail=NULL;}
  54. virtual ~SList() {head=tail=NULL;}
  55. virtual void *iterate(SListNode **);
  56. virtual void add(void *e);
  57. virtual void lfree();
  58. virtual PCCTS_AST *to_ast(SList list);
  59. virtual void require(int e,char *err){ if ( !e ) panic(err); }
  60. virtual void panic(char *err){ fprintf(stderr, "SList panic: %sn", err); exit(PCCTS_EXIT_FAILURE); }
  61. };
  62. #endif