00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxSyntaxNode_h
00012 #define HxSyntaxNode_h
00013
00014 #include "HxIoFwd.h"
00015
00016 typedef enum {
00017 HxSnTerminal,
00018 HxSnBranch
00019 } HxSyntaxNodeTags;
00020
00021 class HxSyntaxNode
00022 {
00023 public:
00024 HxSyntaxNode();
00025 virtual ~HxSyntaxNode() {}
00026
00027 virtual int type() const = 0;
00028 int getLineNr() const;
00029 void setLineNr(int n);
00030
00031 virtual void destroy() = 0;
00032
00033 virtual STD_OSTREAM& put(STD_OSTREAM&, int indent = 0) const = 0;
00034
00035 private:
00036 void operator delete(void*) {};
00037 int _lineNr;
00038 };
00039
00040 typedef HxSyntaxNode* HxSyntaxNodePtr;
00041
00042 inline
00043 HxSyntaxNode::HxSyntaxNode() : _lineNr(-1) {}
00044
00045 inline int
00046 HxSyntaxNode::getLineNr() const { return _lineNr; }
00047
00048 inline void
00049 HxSyntaxNode::setLineNr(int n) { _lineNr = n; }
00050
00051 inline STD_OSTREAM&
00052 operator<<(STD_OSTREAM& os, const HxSyntaxNode& sn) { return sn.put(os); }
00053
00054 inline STD_OSTREAM&
00055 operator<<(STD_OSTREAM& os, const HxSyntaxNode* sn) { return sn->put(os); }
00056
00057 #endif