mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-01 03:21:41 +00:00
b88f0d2dbd
Mostly to avoid string literal lookup by index with iteration over all preciding literals and calling strlen. This is very inefficient. In genral this makes code much more straightforward but also makes it portable since now int and float of different sizes are properly supported.
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#ifndef COMPILER_SCRIPTPARSER_H_INCLUDED
|
|
#define COMPILER_SCRIPTPARSER_H_INCLUDED
|
|
|
|
#include "controlparser.hpp"
|
|
#include "lineparser.hpp"
|
|
#include "output.hpp"
|
|
#include "parser.hpp"
|
|
|
|
namespace Compiler
|
|
{
|
|
class Locals;
|
|
|
|
// Script parser, to be used in dialogue scripts and as part of FileParser
|
|
|
|
class ScriptParser : public Parser
|
|
{
|
|
Output mOutput;
|
|
LineParser mLineParser;
|
|
ControlParser mControlParser;
|
|
bool mEnd;
|
|
|
|
public:
|
|
/// \param end of script is marked by end keyword.
|
|
ScriptParser(ErrorHandler& errorHandler, const Context& context, Locals& locals, bool end = false);
|
|
|
|
Interpreter::Program getProgram() const;
|
|
|
|
bool parseName(const std::string& name, const TokenLoc& loc, Scanner& scanner) override;
|
|
///< Handle a name token.
|
|
/// \return fetch another token?
|
|
|
|
bool parseKeyword(int keyword, const TokenLoc& loc, Scanner& scanner) override;
|
|
///< Handle a keyword token.
|
|
/// \return fetch another token?
|
|
|
|
bool parseSpecial(int code, const TokenLoc& loc, Scanner& scanner) override;
|
|
///< Handle a special character token.
|
|
/// \return fetch another token?
|
|
|
|
void parseEOF(Scanner& scanner) override;
|
|
///< Handle EOF token.
|
|
|
|
void reset() override;
|
|
///< Reset parser to clean state.
|
|
};
|
|
}
|
|
|
|
#endif
|