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

编译器/解释器

开发平台:

Others

  1. /* Abstract syntax tree
  2.  *
  3.  * SOFTWARE RIGHTS
  4.  *
  5.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  6.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  7.  * company may do whatever they wish with source code distributed with
  8.  * PCCTS or the code generated by PCCTS, including the incorporation of
  9.  * PCCTS, or its output, into commerical software.
  10.  *
  11.  * We encourage users to develop software with PCCTS.  However, we do ask
  12.  * that credit is given to us for developing PCCTS.  By "credit",
  13.  * we mean that if you incorporate our source code into one of your
  14.  * programs (commercial product, research project, or otherwise) that you
  15.  * acknowledge this fact somewhere in the documentation, research report,
  16.  * etc...  If you like PCCTS and have developed a nice tool with the
  17.  * output, please mention that you developed it using PCCTS.  In
  18.  * addition, we ask that this header remain intact in our source code.
  19.  * As long as these guidelines are kept, we expect to continue enhancing
  20.  * this system and expect to make other tools available as they are
  21.  * completed.
  22.  *
  23.  * ANTLR 1.33
  24.  * Terence Parr
  25.  * Parr Research Corporation
  26.  * with Purdue University and AHPCRC, University of Minnesota
  27.  * 1989-1998
  28.  */
  29. #ifndef ASTBase_H
  30. #define ASTBase_H
  31. #include "pcctscfg.h"
  32. #include PCCTS_STDIO_H
  33. #include PCCTS_STDLIB_H
  34. PCCTS_NAMESPACE_STD
  35. #ifndef PCCTS_NOT_USING_SOR
  36. #include "PCCTSAST.h"
  37. #endif
  38. /*
  39.  * Notes:
  40.  *
  41.  * To specify a copy constructor, subclass one of these classes and
  42.  * give the copy constructor.  To use dup(), you must define shallowCopy().
  43.  * shallowCopy() can use either a copy constructor or just copy the node
  44.  * itself.
  45.  */
  46. #ifdef PCCTS_NOT_USING_SOR
  47. class DllExportPCCTS ASTBase {
  48. #else
  49. class DllExportPCCTS ASTBase : public PCCTS_AST {
  50. #endif
  51. protected:
  52. ASTBase *_right, *_down;
  53. public:
  54. #ifdef PCCTS_NOT_USING_SOR
  55. ASTBase *right() { return _right; }
  56. ASTBase *down()     { return _down; }
  57. void setRight(ASTBase *t) { _right = (ASTBase *)t; }
  58. void setDown(ASTBase *t) { _down = (ASTBase *)t; }
  59. #else
  60. PCCTS_AST *right() { return _right; } // define the SORCERER interface
  61. PCCTS_AST *down() { return _down; }
  62. void setRight(PCCTS_AST *t) { _right = (ASTBase *)t; }
  63. void setDown(PCCTS_AST *t) { _down = (ASTBase *)t; }
  64. #endif
  65. ASTBase() { _right = _down = NULL; }
  66. virtual ~ASTBase() { ; }
  67. #ifndef PCCTS_NOT_USING_SOR
  68. virtual ASTBase *dup();
  69. #endif
  70. void destroy();
  71. void preorder();
  72. static ASTBase *tmake(ASTBase *, ...);
  73. static void link(ASTBase **, ASTBase **, ASTBase **);
  74. void subchild(ASTBase **, ASTBase **, ASTBase **);
  75. void subroot(ASTBase **, ASTBase **, ASTBase **);
  76. virtual void preorder_action() { ; }
  77. virtual void preorder_before_action() { printf(" ("); }
  78. virtual void preorder_after_action() { printf(" )"); }
  79. };
  80. class DllExportPCCTS ASTDoublyLinkedBase : public ASTBase {
  81. protected:
  82.     ASTDoublyLinkedBase *_left, *_up;
  83. public:
  84.   void double_link(ASTBase *left, ASTBase *up);
  85. #ifndef PCCTS_NOT_USING_SOR
  86.   virtual ASTBase *dup();
  87. #endif
  88. #ifdef PCCTS_NOT_USING_SOR
  89.   ASTBase *left() { return _left; }
  90.   ASTBase *up() { return _up; }
  91.   void setLeft(ASTBase *t) { _left = (ASTDoublyLinkedBase *)t; }    // MR6
  92.   void setUp(ASTBase *t)   { _up = (ASTDoublyLinkedBase *)t; }     // MR6
  93. #else
  94.   PCCTS_AST *left() { return _left; }
  95.   PCCTS_AST *up() { return _up; }
  96.   void setLeft(PCCTS_AST *t) { _left = (ASTDoublyLinkedBase *)t; }  // MR6
  97.   void setUp(PCCTS_AST *t)   { _up = (ASTDoublyLinkedBase *)t; } // MR6
  98. #endif
  99. };
  100. class AST; // announce that this class will be coming along shortly
  101. #endif