1 #ifndef COMPILER_FILEPARSER_H_INCLUDED 2 #define COMPILER_FILEPARSER_H_INCLUDED 3 4 #include "parser.hpp" 5 #include "scriptparser.hpp" 6 #include "locals.hpp" 7 #include "literals.hpp" 8 9 namespace Compiler 10 { 11 // Top-level parser, to be used for global scripts, local scripts and targeted scripts 12 13 class FileParser : public Parser 14 { 15 enum State 16 { 17 BeginState, NameState, BeginCompleteState, EndNameState, 18 EndCompleteState 19 }; 20 21 ScriptParser mScriptParser; 22 State mState; 23 std::string mName; 24 Locals mLocals; 25 26 public: 27 28 FileParser (ErrorHandler& errorHandler, Context& context); 29 30 std::string getName() const; 31 ///< Return script name. 32 33 void getCode (std::vector<Interpreter::Type_Code>& code) const; 34 ///< store generated code in \a code. 35 36 const Locals& getLocals() const; 37 ///< get local variable declarations. 38 39 bool parseName (const std::string& name, const TokenLoc& loc, 40 Scanner& scanner) override; 41 ///< Handle a name token. 42 /// \return fetch another token? 43 44 bool parseKeyword (int keyword, const TokenLoc& loc, Scanner& scanner) override; 45 ///< Handle a keyword token. 46 /// \return fetch another token? 47 48 bool parseSpecial (int code, const TokenLoc& loc, Scanner& scanner) override; 49 ///< Handle a special character token. 50 /// \return fetch another token? 51 52 void parseEOF (Scanner& scanner) override; 53 ///< Handle EOF token. 54 55 void reset() override; 56 ///< Reset parser to clean state. 57 }; 58 } 59 60 #endif 61