blob: 64a91d42e23707b050c29c812573f90b09eae7bf [file] [log] [blame]
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +00001//===- 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"
Benjamin Kramerbd521202016-06-03 16:57:13 +000015#include <utility>
Adhemerval Zanellab92a34e2016-04-06 21:33:18 +000016#include <vector>
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000017
18namespace lld {
19namespace elf {
20
21class ScriptParserBase {
22public:
Rui Ueyama14703662016-05-16 21:06:31 +000023 explicit ScriptParserBase(StringRef S) : Input(S), Tokens(tokenize(S)) {}
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000024
25protected:
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();
Justin Bogner5424e7c2016-10-17 06:21:13 +000032 void skip();
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000033 bool skip(StringRef Tok);
34 void expect(StringRef Expect);
35
36 size_t getPos();
37 void printErrorPos();
38
Adhemerval Zanellae77b5bf2016-04-06 20:59:11 +000039 StringRef Input;
40 std::vector<StringRef> Tokens;
41 size_t Pos = 0;
42 bool Error = false;
43};
44
45} // namespace elf
46} // namespace lld
47
48#endif