diff options
Diffstat (limited to 'lld/ELF/ScriptParser.h')
-rw-r--r-- | lld/ELF/ScriptParser.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lld/ELF/ScriptParser.h b/lld/ELF/ScriptParser.h new file mode 100644 index 00000000000..9db5d32cebd --- /dev/null +++ b/lld/ELF/ScriptParser.h @@ -0,0 +1,50 @@ +//===- ScriptParser.h -------------------------------------------*- C++ -*-===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_ELF_SCRIPT_PARSER_H +#define LLD_ELF_SCRIPT_PARSER_H + +#include "lld/Core/LLVM.h" +#include "llvm/ADT/StringRef.h" + +namespace lld { +namespace elf { + +class ScriptParserBase { +public: + ScriptParserBase(StringRef S) : Input(S), Tokens(tokenize(S)) {} + virtual ~ScriptParserBase() = default; + + virtual void run() = 0; + +protected: + void setError(const Twine &Msg); + static std::vector<StringRef> tokenize(StringRef S); + static StringRef skipSpace(StringRef S); + bool atEOF(); + StringRef next(); + StringRef peek(); + bool skip(StringRef Tok); + void expect(StringRef Expect); + + size_t getPos(); + void printErrorPos(); + + std::vector<uint8_t> parseHex(StringRef S); + + StringRef Input; + std::vector<StringRef> Tokens; + size_t Pos = 0; + bool Error = false; +}; + +} // namespace elf +} // namespace lld + +#endif |