Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

skParseNode.h

00001 /*
00002   Copyright 1996-2001
00003   Simon Whiteside
00004 
00005  * $Id: skParseNode_h-source.html,v 1.5 2001/05/09 10:32:28 sdw Exp $
00006 */
00007 
00008 #ifndef PARSENODE_H
00009 #define PARSENODE_H
00010 #include "skStringList.h"
00011 #include "skAlist.h"
00012 
00013 
00014 static const int s_If=4;
00015 static const int s_While=5;
00016 static const int s_Return=6;
00017 static const int s_Assign=7;
00018 static const int s_Method=8;
00019 static const int s_IdList=9;
00020 static const int s_String=10;
00021 static const int s_Integer=11;
00022 static const int s_Not=12;
00023 static const int s_And=13;
00024 static const int s_Or=14;
00025 static const int s_Less=15;
00026 static const int s_More=16;
00027 static const int s_Equals=17;
00028 static const int s_Plus=18;
00029 static const int s_Minus=19;
00030 static const int s_Subtract=20;
00031 static const int s_Concat=21;
00032 static const int s_Divide=22;
00033 static const int s_Mult=23;
00034 static const int s_Mod=24;
00035 static const int s_Float=25;
00036 static const int s_Character=26;
00037 static const int s_CaseList=27;
00038 static const int s_Case=28;
00039 static const int s_Switch=29;
00040 static const int s_Id=30;
00041 static const int s_NotEquals=31;
00042 
00046 class skParseNode {
00047  public:
00048   skParseNode(){
00049   }
00050   virtual ~skParseNode(){
00051   }
00052   virtual int getType(){
00053     return 0;
00054   }
00055   virtual void clear(){
00056   }
00057  private:
00058   skParseNode(const skParseNode& ){
00059   }
00060   skParseNode& operator=(const skParseNode&){
00061     return *this;
00062   }
00063 };
00064 class skParseNodeList : public skTAList<skParseNode>{
00065 };
00066 typedef  skTAListIterator<skParseNode> skParseNodeListIterator;
00067 class skStatNode : public skParseNode {
00068  public:
00069   virtual ~skStatNode(){
00070   }
00071 };
00072 class skExprNode : public skParseNode {
00073  public:
00074   skExprNode(){
00075   }
00076   virtual ~skExprNode(){
00077   }
00078 };
00079 typedef skTAList<skStatNode> skStatList;
00080 typedef skTAListIterator<skStatNode> skStatListIterator;
00081 
00082 class skStatListNode : public skParseNode {
00083  public:
00084   skStatList m_Stats;
00085   inline ~skStatListNode(){
00086     m_Stats.clearAndDestroy();
00087   }
00088   inline void addStat(skStatNode * stat){
00089     m_Stats.append(stat);
00090   }
00091   inline void clear(){
00092     m_Stats.clear();
00093   }
00094   inline int numStats(){
00095     return m_Stats.entries();
00096   }
00097 };
00098 typedef skTAList<skExprNode> skExprList;
00099 typedef skTAListIterator<skExprNode> skExprListIterator;
00100 class skExprListNode : public skParseNode {
00101  public:
00102   skExprList m_Exprs;
00103   inline ~skExprListNode(){
00104     m_Exprs.clearAndDestroy();
00105   }
00106   inline void addExpr(skExprNode * expr){
00107     m_Exprs.append(expr);
00108   }
00109   inline int numExprs(){
00110     return m_Exprs.entries();;
00111   }
00112   inline void clear(){
00113     m_Exprs.clear();
00114   }
00115 };
00116 class skIdNode : public skExprNode {
00117  public:
00118   skString m_Id;
00119   skExprListNode * m_Exprs;
00120   skExprNode * m_ArrayIndex;
00121   inline skIdNode(skString id,skExprNode * arrayIndex,skExprListNode * exprs){
00122     m_Id=id;
00123     m_Exprs=exprs;
00124     m_ArrayIndex=arrayIndex;
00125   }
00126   inline ~skIdNode(){
00127     delete m_Exprs;
00128   }
00129   inline void clear(){
00130     m_Exprs=0;
00131     m_ArrayIndex=0;
00132   }
00133   inline int getType(){
00134     return s_Id;
00135   }
00136 };
00137 class skIdNodeList : public skTAList<skIdNode>{
00138 };
00139 typedef  skTAListIterator<skIdNode> skIdNodeListIterator;
00140 class skIdListNode : public skExprNode {
00141  public:
00142   skIdNodeList m_Ids;
00143   skString m_Attribute;
00144   inline skIdListNode(){
00145   }
00146   inline ~skIdListNode(){
00147   }
00148   inline void addId(skIdNode * node){
00149     m_Ids.append(node);
00150   }
00151   inline void prependId(skIdNode * node){
00152     m_Ids.prepend(node);
00153   }
00154   inline int numIds(){
00155     return m_Ids.entries();
00156   }
00157   inline void clear(){
00158     m_Ids.clear();
00159   }
00160   inline skIdNode * getLastId(){
00161     return m_Ids[m_Ids.entries()-1];
00162   }
00163   inline int getType(){
00164     return s_IdList;
00165   }
00166 };
00167 class skCaseNode : public skParseNode {
00168  public:
00169   skExprNode * m_Expr;
00170   skStatListNode * m_Stats;
00171   inline skCaseNode(skExprNode * expr,skStatListNode * stat){
00172     m_Expr=expr;
00173     m_Stats=stat;
00174   }
00175   inline ~skCaseNode(){
00176     delete m_Expr;
00177     delete m_Stats;
00178   }
00179   inline void clear(){
00180     m_Expr=0;
00181     m_Stats=0;
00182   }
00183   inline int getType(){
00184     return s_Case;
00185   }
00186 };
00187 typedef skTAList<skCaseNode> skCaseList;
00188 typedef skTAListIterator<skCaseNode> skCaseListIterator;
00189 class skCaseListNode : public skParseNode {
00190  public:
00191   skCaseList m_Cases;
00192   inline ~skCaseListNode(){
00193     m_Cases.clearAndDestroy();
00194   }
00195   inline void addCase(skCaseNode * expr){
00196     m_Cases.append(expr);
00197   }
00198   inline int numCases(){
00199     return m_Cases.entries();;
00200   }
00201   inline void clear(){
00202     m_Cases.clear();
00203   }
00204 };
00205 class skSwitchNode : public skStatNode {
00206  public:
00207   skExprNode * m_Expr;
00208   skCaseListNode * m_Cases;
00209   skStatListNode * m_Default;
00210   inline skSwitchNode(skExprNode * expr,skCaseListNode * cases,skStatListNode * defaultStat){
00211     m_Expr=expr;
00212     m_Cases=cases;
00213     m_Default=defaultStat;
00214   }
00215   inline ~skSwitchNode(){
00216     delete m_Expr;
00217     delete m_Cases;
00218     delete m_Default;
00219   }
00220   inline void clear(){
00221     m_Expr=0;
00222     m_Cases=0;
00223     m_Default=0;
00224   }
00225   inline int getType(){
00226     return s_Switch;
00227   }
00228 };
00229 class skIfNode : public skStatNode {
00230  public:
00231   skExprNode * m_Expr;
00232   skStatListNode * m_Stats;
00233   skStatListNode * m_Else;
00234   inline skIfNode(skExprNode * expr,skStatListNode * stat,skStatListNode * elseStat){
00235     m_Expr=expr;
00236     m_Stats=stat;
00237     m_Else=elseStat;
00238   }
00239   inline ~skIfNode(){
00240     delete m_Expr;
00241     delete m_Stats;
00242     delete m_Else;
00243   }
00244   inline void clear(){
00245     m_Expr=0;
00246     m_Stats=0;
00247     m_Else=0;
00248   }
00249   inline int getType(){
00250     return s_If;
00251   }
00252 };
00253 class skReturnNode : public skStatNode {
00254  public:
00255   skExprNode * m_Expr;
00256   inline skReturnNode(skExprNode * expr){
00257     m_Expr=expr;
00258   }
00259   inline ~skReturnNode(){
00260     delete m_Expr;
00261   }
00262   inline void clear(){
00263     m_Expr=0;
00264   }
00265   inline int getType(){
00266     return s_Return;
00267   }
00268 };
00269 class skWhileNode : public skStatNode {
00270  public:
00271   skExprNode * m_Expr;
00272   skStatListNode * m_Stats;
00273   inline skWhileNode(skExprNode * expr,skStatListNode * stat){
00274     m_Expr=expr;
00275     m_Stats=stat;
00276   }
00277   inline ~skWhileNode(){
00278     delete m_Expr;
00279     delete m_Stats;
00280   }
00281   inline void clear(){
00282     m_Expr=0;
00283     m_Stats=0;
00284   }
00285   inline int getType(){
00286     return s_While;
00287   }
00288 };
00289 class skAssignNode : public skStatNode {
00290  public:
00291   skIdListNode * m_Ids;
00292   skExprNode * m_Expr;
00293   inline skAssignNode(skIdListNode * idlist, skString * attribute,skExprNode * expr){
00294     m_Ids=idlist;
00295     if (attribute)
00296       m_Ids->m_Attribute=*attribute;
00297     delete attribute;
00298     m_Expr=expr;
00299   }
00300   inline ~skAssignNode(){
00301     delete m_Ids;
00302     delete m_Expr;
00303   }
00304   inline void clear(){
00305     m_Ids=0;
00306     m_Expr=0;
00307   }
00308   inline int getType(){
00309     return s_Assign;
00310   }
00311 };
00312 class skMethodStatNode : public skStatNode {
00313  public:
00314   skIdListNode * m_Ids;
00315   inline skMethodStatNode(skIdListNode * idlist){
00316     m_Ids=idlist;
00317   }
00318   inline ~skMethodStatNode(){
00319     delete m_Ids;
00320   }
00321   inline void clear(){
00322     m_Ids->clear();
00323     m_Ids=0;
00324   }
00325   inline int getType(){
00326     return s_Method;
00327   }
00328 };
00329 class skLiteralNode : public skExprNode {
00330  public:
00331   int m_Type;
00332   union {
00333     float m_Float;
00334     int m_Int;
00335     char m_Char;
00336     skString * m_String;
00337   };
00338   inline skLiteralNode(skString * s){
00339     m_String=s;
00340     m_Type=s_String;
00341   }
00342   inline skLiteralNode(int i){
00343     m_Int=i;
00344     m_Type=s_Integer;
00345   }
00346   inline skLiteralNode(char i){
00347     m_Char=i;
00348     m_Type=s_Character;
00349   }
00350   inline skLiteralNode(float f){
00351     m_Float=f;
00352     m_Type=s_Float;
00353   }
00354   inline ~skLiteralNode(){
00355     if (m_Type==s_String)
00356       delete m_String;
00357   }
00358   inline void clear(){
00359     m_String=0;
00360   }
00361   inline int getType(){
00362     return m_Type;
00363   }
00364 };
00365 class skOpNode : public skExprNode {
00366  public:
00367   skExprNode * m_Expr1;
00368   skExprNode * m_Expr2;
00369   int m_Type;
00370   inline skOpNode(int type,skExprNode * expr1,skExprNode * expr2){
00371     m_Expr1=expr1;
00372     m_Expr2=expr2;
00373     m_Type=type;
00374   }
00375   virtual ~skOpNode(){
00376     delete m_Expr1;
00377     delete m_Expr2;
00378   }
00379   inline void clear(){
00380     m_Expr1=0;
00381     m_Expr2=0;
00382   }
00383   inline int getType(){
00384     return m_Type;
00385   }
00386 };
00391 class skMethodDefNode : public skParseNode {
00392  public:
00393   skStatListNode * m_Stats;
00394   skIdListNode * m_Params;
00395   inline skMethodDefNode(skStatListNode * stats){
00396     m_Stats=stats;
00397     m_Params=0;
00398   }
00399   inline skMethodDefNode(skIdListNode * params,skStatListNode * stats){
00400     m_Stats=stats;
00401     m_Params=params;
00402   }
00403   inline ~skMethodDefNode(){
00404     delete m_Stats;
00405     delete m_Params;
00406   }
00407   inline void clear(){
00408     m_Stats=0;
00409     m_Params=0;
00410   }
00411  private:
00412   skMethodDefNode(const skMethodDefNode& ){
00413   }
00414   skMethodDefNode& operator=(const skMethodDefNode&){
00415     return *this;
00416   }
00417 };
00418 #endif
00419 
00420 
00421 

Generated at Wed May 9 11:32:22 2001 for Simkin by doxygen1.2.1 written by Dimitri van Heesch, © 1997-2000