OpenMW
|
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