1 #ifndef INC_ASTPair_hpp__ 2 #define INC_ASTPair_hpp__ 3 4 /* ANTLR Translator Generator 5 * Project led by Terence Parr at http://www.jGuru.com 6 * Software rights: http://www.antlr.org/license.html 7 * 8 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/ASTPair.hpp#2 $ 9 */ 10 11 #include <antlr/config.hpp> 12 #include <antlr/AST.hpp> 13 14 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 15 namespace antlr { 16 #endif 17 18 /** ASTPair: utility class used for manipulating a pair of ASTs 19 * representing the current AST root and current AST sibling. 20 * This exists to compensate for the lack of pointers or 'var' 21 * arguments in Java. 22 * 23 * OK, so we can do those things in C++, but it seems easier 24 * to stick with the Java way for now. 25 */ 26 class ANTLR_API ASTPair { 27 public: 28 RefAST root; // current root of tree 29 RefAST child; // current child to which siblings are added 30 31 /** Make sure that child is the last sibling */ advanceChildToEnd()32 void advanceChildToEnd() { 33 if (child) { 34 while (child->getNextSibling()) { 35 child = child->getNextSibling(); 36 } 37 } 38 } 39 // /** Copy an ASTPair. Don't call it clone() because we want type-safety */ 40 // ASTPair copy() { 41 // ASTPair tmp = new ASTPair(); 42 // tmp.root = root; 43 // tmp.child = child; 44 // return tmp; 45 // } ANTLR_USE_NAMESPACE(std)46 ANTLR_USE_NAMESPACE(std)string toString() const { 47 ANTLR_USE_NAMESPACE(std)string r = !root ? ANTLR_USE_NAMESPACE(std)string("null") : root->getText(); 48 ANTLR_USE_NAMESPACE(std)string c = !child ? ANTLR_USE_NAMESPACE(std)string("null") : child->getText(); 49 return "["+r+","+c+"]"; 50 } 51 }; 52 53 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 54 } 55 #endif 56 57 #endif //INC_ASTPair_hpp__ 58