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