ANTLR Support Libraries 2.7.1+

antlr/TreeParser.hpp

Go to the documentation of this file.
00001 #ifndef INC_TreeParser_hpp__
00002 #define INC_TreeParser_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/TreeParser.hpp#2 $
00009  */
00010 
00011 #include <antlr/config.hpp>
00012 #include <antlr/AST.hpp>
00013 #include <antlr/ASTFactory.hpp>
00014 #include <antlr/BitSet.hpp>
00015 #include <antlr/RecognitionException.hpp>
00016 #include <antlr/MismatchedTokenException.hpp>
00017 #include <antlr/TreeParserSharedInputState.hpp>
00018 
00019 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00020 namespace antlr {
00021 #endif
00022 
00023 class ANTLR_API TreeParser {
00024 public:
00025    TreeParser()
00026    : astFactory(0)
00027    , inputState(new TreeParserInputState())
00028    , traceDepth(0)
00029    {
00030    }
00031 
00032    TreeParser(const TreeParserSharedInputState& state)
00033    : astFactory(0)
00034    , inputState(state)
00035    , traceDepth(0)
00036    {
00037    }
00038 
00039    virtual ~TreeParser()
00040    {
00041    }
00042 
00044    virtual RefAST getAST() = 0;
00045 
00050    virtual void match(RefAST t, const BitSet& b)
00051    {
00052       if ( !t || t==ASTNULL || !b.member(t->getType()) )
00053          throw MismatchedTokenException( getTokenNames(), getNumTokens(),
00054                                          t, b, false );
00055    }
00056 
00063    virtual void setASTFactory(ASTFactory* factory)
00064    {
00065       astFactory = factory;
00066    }
00068    virtual ASTFactory* getASTFactory() const
00069    {
00070       return astFactory;
00071    }
00073    virtual const char* getTokenName(int num) const = 0;
00075    virtual int getNumTokens() const = 0;
00077    virtual const char* const* getTokenNames() const = 0;
00078 
00080    virtual void reportError(const RecognitionException& ex);
00082    virtual void reportError(const ANTLR_USE_NAMESPACE(std)string& s);
00084    virtual void reportWarning(const ANTLR_USE_NAMESPACE(std)string& s);
00085 
00087    virtual void traceIndent();
00088    virtual void traceIn(const char* rname, RefAST t);
00089    virtual void traceOut(const char* rname, RefAST t);
00090 
00096    static RefAST ASTNULL;
00097 
00098 protected:
00099    virtual void match(RefAST t, int ttype)
00100    {
00101       if (!t || t == ASTNULL || t->getType() != ttype )
00102          throw MismatchedTokenException( getTokenNames(), getNumTokens(),
00103                                          t, ttype, false );
00104    }
00105 
00106    virtual void matchNot(RefAST t, int ttype)
00107    {
00108       if ( !t || t == ASTNULL || t->getType() == ttype )
00109          throw MismatchedTokenException( getTokenNames(), getNumTokens(),
00110                                          t, ttype, true );
00111    }
00112 
00114    ASTFactory* astFactory;
00115 
00117    TreeParserSharedInputState inputState;
00118 
00120    int traceDepth;
00121 
00125    class Tracer {
00126    private:
00127       TreeParser* parser;
00128       const char* text;
00129       RefAST tree;
00130    public:
00131       Tracer(TreeParser* p, const char* t, RefAST a)
00132       : parser(p), text(t), tree(a)
00133       {
00134          parser->traceIn(text,tree);
00135       }
00136       ~Tracer()
00137       {
00138          parser->traceOut(text,tree);
00139       }
00140    private:
00141       Tracer(const Tracer&);                    // undefined
00142       const Tracer& operator=(const Tracer&);   // undefined
00143    };
00144 
00145 private:
00146    // no copying of treeparser instantiations...
00147    TreeParser(const TreeParser& other);
00148    TreeParser& operator=(const TreeParser& other);
00149 };
00150 
00151 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00152 }
00153 #endif
00154 
00155 #endif //INC_TreeParser_hpp__
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines