expressionParser.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: expressionParser.h,v 1.13 2005/10/23 12:02:18 oliver Exp $
00005 //
00006 
00007 #ifndef BALL_KERNEL_EXPRESSIONPARSER_H
00008 #define BALL_KERNEL_EXPRESSIONPARSER_H
00009 
00010 #ifndef BALL_KERNEL_EXPRESSION_TREE_H
00011 # include <BALL/KERNEL/expressionTree.h>
00012 #endif
00013 
00014 namespace BALL 
00015 {
00016 
00024   class BALL_EXPORT ExpressionParser
00025   {
00026     public:
00027 
00033     class BALL_EXPORT SyntaxTree
00034     {
00035       public:
00036       
00040 
00042       typedef list<SyntaxTree*>::iterator       Iterator;
00043 
00045       typedef list<SyntaxTree*>::const_iterator ConstIterator;
00046       
00048 
00052 
00055       SyntaxTree();
00056 
00059       SyntaxTree(const char* predicate_name, const char* args);
00060         
00063       SyntaxTree(SyntaxTree* left, SyntaxTree* right, ExpressionTree::Type type);
00064 
00067       virtual ~SyntaxTree();
00068       
00070 
00073 
00078       virtual void clear();
00079 
00081 
00085 
00088       Iterator begin();
00089 
00092       Iterator end();
00093 
00096       ConstIterator begin() const;
00097 
00100       ConstIterator end() const;
00101 
00103 
00107       void dump(std::ostream& is = std::cout, Size depth = 0) const;
00109 
00115       String                expression;
00116 
00119       String                predicate;
00120 
00123       String                argument;
00124 
00127       bool                  evaluated;
00128 
00131       bool                  negate;
00132 
00135       ExpressionTree::Type  type;
00136 
00139       list<SyntaxTree*>     children;
00141     };
00142 
00143 
00147 
00149     ExpressionParser();
00150       
00152     ExpressionParser(const ExpressionParser& parser);
00153 
00155     ~ExpressionParser();
00157     
00163     void parse(const String& s)
00164       throw(Exception::ParseError);
00165 
00168     const SyntaxTree& getSyntaxTree() const
00169       throw(Exception::NullPointer);
00171     
00172     struct State
00173     {
00174       Size              char_count;
00175       ExpressionParser* current_parser;
00176       const char*       buffer;
00177       SyntaxTree*       tree;
00178     };
00179     
00180     static State state;
00181 
00182     protected:
00183     SyntaxTree*               syntax_tree_;
00184     static ExpressionParser*  current_parser_;
00185   };
00186 } // namespace BALL
00187 
00188 #endif // BALL_KERNEL_EXPRESSIONPARSER_H