1 //===- ScriptParser.h -------------------------------------------*- C++ -*-===//
2 //
3 //                             The LLVM Linker
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLD_ELF_SCRIPT_PARSER_H
11 #define LLD_ELF_SCRIPT_PARSER_H
12 
13 #include "lld/Core/LLVM.h"
14 #include "llvm/ADT/StringRef.h"
15 #include <utility>
16 #include <vector>
17 
18 namespace lld {
19 namespace elf {
20 
21 class ScriptParserBase {
22 public:
23   explicit ScriptParserBase(StringRef S) : Input(S), Tokens(tokenize(S)) {}
24 
25 protected:
26   void setError(const Twine &Msg);
27   static std::vector<StringRef> tokenize(StringRef S);
28   static StringRef skipSpace(StringRef S);
29   bool atEOF();
30   StringRef next();
31   StringRef peek();
32   bool skip(StringRef Tok);
33   void expect(StringRef Expect);
34 
35   size_t getPos();
36   void printErrorPos();
37 
38   StringRef Input;
39   std::vector<StringRef> Tokens;
40   size_t Pos = 0;
41   bool Error = false;
42 };
43 
44 } // namespace elf
45 } // namespace lld
46 
47 #endif
48