BALL  1.4.1
expressionParser.h
Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 
00005 #ifndef BALL_KERNEL_EXPRESSIONPARSER_H
00006 #define BALL_KERNEL_EXPRESSIONPARSER_H
00007 
00008 #ifndef BALL_KERNEL_EXPRESSION_TREE_H
00009 # include <BALL/KERNEL/expressionTree.h>
00010 #endif
00011 
00012 namespace BALL 
00013 {
00014 
00022   class BALL_EXPORT ExpressionParser
00023   {
00024     public:
00025 
00031     class BALL_EXPORT SyntaxTree
00032     {
00033       public:
00034       
00038 
00040       typedef list<SyntaxTree*>::iterator       Iterator;
00041 
00043       typedef list<SyntaxTree*>::const_iterator ConstIterator;
00044       
00046 
00050 
00053       SyntaxTree();
00054 
00057       SyntaxTree(const char* predicate_name, const char* args);
00058         
00061       SyntaxTree(SyntaxTree* left, SyntaxTree* right, ExpressionTree::Type type);
00062 
00065       virtual ~SyntaxTree();
00066       
00068 
00071 
00076       virtual void clear();
00077 
00079 
00083 
00086       Iterator begin();
00087 
00090       Iterator end();
00091 
00094       ConstIterator begin() const;
00095 
00098       ConstIterator end() const;
00099 
00101 
00105       void dump(std::ostream& is = std::cout, Size depth = 0) const;
00107 
00113       String                expression;
00114 
00117       String                predicate;
00118 
00121       String                argument;
00122 
00125       bool                  evaluated;
00126 
00129       bool                  negate;
00130 
00133       ExpressionTree::Type  type;
00134 
00137       list<SyntaxTree*>     children;
00139     };
00140 
00141 
00145 
00147     ExpressionParser();
00148       
00150     ExpressionParser(const ExpressionParser& parser);
00151 
00153     ~ExpressionParser();
00155     
00159 
00163     void parse(const String& s);
00164 
00168     const SyntaxTree& getSyntaxTree() const;
00169 
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines