ANTLR Support Libraries 2.7.1+
|
00001 #ifndef INC_AST_hpp__ 00002 #define INC_AST_hpp__ 00003 00004 /* ANTLR Translator Generator 00005 * Project led by Terence Parr at http://www.jGuru.com 00006 * Software rights: http://www.antlr.org/license.html 00007 * 00008 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/AST.hpp#2 $ 00009 */ 00010 00011 #include <antlr/config.hpp> 00012 #include <antlr/ASTRefCount.hpp> 00013 #include <antlr/Token.hpp> 00014 #include <vector> 00015 #include <string> 00016 00017 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 00018 namespace antlr { 00019 #endif 00020 00021 struct ASTRef; 00022 00023 class ANTLR_API AST { 00024 public: 00025 AST() : ref(0) {} 00026 AST(const AST&) : ref(0) {} 00027 virtual ~AST() {} 00028 00030 virtual const char* typeName( void ) const = 0; 00032 virtual RefAST clone( void ) const = 0; 00034 virtual bool equals(RefAST t) const = 0; 00038 virtual bool equalsList(RefAST t) const = 0; 00039 00042 virtual bool equalsListPartial(RefAST t) const = 0; 00046 virtual bool equalsTree(RefAST t) const = 0; 00050 virtual bool equalsTreePartial(RefAST t) const = 0; 00051 00056 virtual ANTLR_USE_NAMESPACE(std)vector<RefAST> findAll(RefAST t) = 0; 00057 00062 virtual ANTLR_USE_NAMESPACE(std)vector<RefAST> findAllPartial(RefAST t) = 0; 00063 00065 virtual void addChild(RefAST c) = 0; 00067 virtual size_t getNumberOfChildren() const = 0; 00068 00070 virtual RefAST getFirstChild() const = 0; 00072 virtual RefAST getNextSibling() const = 0; 00073 00075 virtual ANTLR_USE_NAMESPACE(std)string getText() const = 0; 00077 virtual int getType() const = 0; 00078 00082 virtual void initialize(int t, const ANTLR_USE_NAMESPACE(std)string& txt) = 0; 00083 virtual void initialize(RefAST t) = 0; 00084 virtual void initialize(RefToken t) = 0; 00085 00086 #ifdef ANTLR_SUPPORT_XML 00087 00090 virtual void initialize( ANTLR_USE_NAMESPACE(std)istream& in ) = 0; 00091 #endif 00092 00094 virtual void setFirstChild(RefAST c) = 0; 00096 virtual void setNextSibling(RefAST n) = 0; 00097 00099 virtual void setText(const ANTLR_USE_NAMESPACE(std)string& txt) = 0; 00101 virtual void setType(int type) = 0; 00102 00104 virtual ANTLR_USE_NAMESPACE(std)string toString() const = 0; 00105 00107 virtual ANTLR_USE_NAMESPACE(std)string toStringList() const = 0; 00108 virtual ANTLR_USE_NAMESPACE(std)string toStringTree() const = 0; 00109 00110 #ifdef ANTLR_SUPPORT_XML 00111 00116 virtual bool attributesToStream( ANTLR_USE_NAMESPACE(std)ostream& out ) const = 0; 00117 00122 virtual void toStream( ANTLR_USE_NAMESPACE(std)ostream &out ) const = 0; 00123 00130 friend ANTLR_USE_NAMESPACE(std)ostream& operator<<( ANTLR_USE_NAMESPACE(std)ostream& output, const RefAST& ast ); 00131 #endif 00132 00133 private: 00134 friend struct ASTRef; 00135 ASTRef* ref; 00136 00137 AST(RefAST other); 00138 AST& operator=(const AST& other); 00139 AST& operator=(RefAST other); 00140 }; 00141 00142 #ifdef ANTLR_SUPPORT_XML 00143 inline ANTLR_USE_NAMESPACE(std)ostream& operator<<( ANTLR_USE_NAMESPACE(std)ostream& output, const RefAST& ast ) 00144 { 00145 ast->toStream(output); 00146 return output; 00147 } 00148 #endif 00149 00150 extern ANTLR_API RefAST nullAST; 00151 extern ANTLR_API AST* const nullASTptr; 00152 00153 #ifdef NEEDS_OPERATOR_LESS_THAN 00154 // RK: apparently needed by MSVC and a SUN CC, up to and including 00155 // 2.7.2 this was undefined ? 00156 inline bool operator<( RefAST l, RefAST r ) 00157 { 00158 return nullAST == l ? ( nullAST == r ? false : true ) : l->getType() < r->getType(); 00159 } 00160 #endif 00161 00162 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 00163 } 00164 #endif 00165 00166 #endif //INC_AST_hpp__