OpenMW
components/compiler/parser.hpp
Go to the documentation of this file.
00001 #ifndef COMPILER_PARSER_H_INCLUDED
00002 #define COMPILER_PARSER_H_INCLUDED
00003 
00004 #include <string>
00005 
00006 namespace Compiler
00007 {
00008     class Scanner;
00009     struct TokenLoc;
00010     class ErrorHandler;
00011     class Context;
00012 
00016 
00017     class Parser
00018     {
00019             ErrorHandler& mErrorHandler;
00020             Context& mContext;
00021             bool mOptional;
00022             bool mEmpty;
00023 
00024         protected:
00025 
00026             void reportSeriousError (const std::string& message, const TokenLoc& loc);
00028 
00029             void reportError (const std::string& message, const TokenLoc& loc);
00031 
00032             void reportWarning (const std::string& message, const TokenLoc& loc);
00034 
00035             void reportEOF();
00037 
00038             ErrorHandler& getErrorHandler();
00040 
00041             Context& getContext();
00043 
00044             static std::string toLower (const std::string& name);
00045 
00046         public:
00047 
00048             Parser (ErrorHandler& errorHandler, Context& context);
00050 
00051             virtual ~Parser();
00053 
00054             virtual bool parseInt (int value, const TokenLoc& loc, Scanner& scanner);
00059 
00060             virtual bool parseFloat (float value, const TokenLoc& loc, Scanner& scanner);
00065 
00066             virtual bool parseName (const std::string& name, const TokenLoc& loc,
00067                 Scanner& scanner);
00072 
00073             virtual bool parseKeyword (int keyword, const TokenLoc& loc, Scanner& scanner);
00078 
00079             virtual bool parseSpecial (int code, const TokenLoc& loc, Scanner& scanner);
00084 
00085             virtual bool parseComment (const std::string& comment, const TokenLoc& loc,
00086                 Scanner& scanner);
00091 
00092             virtual void parseEOF (Scanner& scanner);
00096 
00097             virtual void reset();
00099 
00100             void setOptional (bool optional);
00103 
00104             void start();
00106 
00107             bool isEmpty() const;
00109     };
00110 }
00111 
00112 #endif