OpenMW
apps/opencs/model/filter/parser.hpp
Go to the documentation of this file.
00001 #ifndef CSM_FILTER_PARSER_H
00002 #define CSM_FILTER_PARSER_H
00003 
00004 #include <boost/shared_ptr.hpp>
00005 
00006 #include "node.hpp"
00007 
00008 namespace CSMWorld
00009 {
00010     class Data;
00011 }
00012 
00013 namespace CSMFilter
00014 {
00015     struct Token;
00016 
00017     class Parser
00018     {
00019             boost::shared_ptr<Node> mFilter;
00020             std::string mInput;
00021             int mIndex;
00022             bool mError;
00023             const CSMWorld::Data& mData;
00024 
00025             Token getStringToken();
00026 
00027             Token getNumberToken();
00028 
00029             Token getNextToken();
00030 
00031             Token checkKeywords (const Token& token);
00033 
00034             boost::shared_ptr<Node> parseImp (bool allowEmpty = false, bool ignoreOneShot = false);
00036 
00037             boost::shared_ptr<Node> parseNAry (const Token& keyword);
00038 
00039             boost::shared_ptr<Node> parseText();
00040 
00041             boost::shared_ptr<Node> parseValue();
00042 
00043             void error();
00044 
00045         public:
00046 
00047             Parser (const CSMWorld::Data& data);
00048 
00049             bool parse (const std::string& filter, bool allowPredefined = true);
00053 
00054             boost::shared_ptr<Node> getFilter() const;
00056     };
00057 }
00058 
00059 #endif