1ece8a530Spatrick //===- ScriptLexer.h --------------------------------------------*- C++ -*-===// 2ece8a530Spatrick // 3ece8a530Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ece8a530Spatrick // See https://llvm.org/LICENSE.txt for license information. 5ece8a530Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ece8a530Spatrick // 7ece8a530Spatrick //===----------------------------------------------------------------------===// 8ece8a530Spatrick 9ece8a530Spatrick #ifndef LLD_ELF_SCRIPT_LEXER_H 10ece8a530Spatrick #define LLD_ELF_SCRIPT_LEXER_H 11ece8a530Spatrick 12ece8a530Spatrick #include "lld/Common/LLVM.h" 13ece8a530Spatrick #include "llvm/ADT/StringRef.h" 14*dfe94b16Srobert #include "llvm/Support/MemoryBufferRef.h" 15ece8a530Spatrick #include <vector> 16ece8a530Spatrick 17*dfe94b16Srobert namespace lld::elf { 18ece8a530Spatrick 19ece8a530Spatrick class ScriptLexer { 20ece8a530Spatrick public: 21ece8a530Spatrick explicit ScriptLexer(MemoryBufferRef mb); 22ece8a530Spatrick 23ece8a530Spatrick void setError(const Twine &msg); 24ece8a530Spatrick void tokenize(MemoryBufferRef mb); 251cf9926bSpatrick StringRef skipSpace(StringRef s); 26ece8a530Spatrick bool atEOF(); 27ece8a530Spatrick StringRef next(); 28ece8a530Spatrick StringRef peek(); 29ece8a530Spatrick StringRef peek2(); 30ece8a530Spatrick void skip(); 31ece8a530Spatrick bool consume(StringRef tok); 32ece8a530Spatrick void expect(StringRef expect); 33ece8a530Spatrick bool consumeLabel(StringRef tok); 34ece8a530Spatrick std::string getCurrentLocation(); 35ece8a530Spatrick 36ece8a530Spatrick std::vector<MemoryBufferRef> mbs; 37ece8a530Spatrick std::vector<StringRef> tokens; 38ece8a530Spatrick bool inExpr = false; 39ece8a530Spatrick size_t pos = 0; 40ece8a530Spatrick 411cf9926bSpatrick size_t lastLineNumber = 0; 421cf9926bSpatrick size_t lastLineNumberOffset = 0; 431cf9926bSpatrick 44bb684c34Spatrick protected: 45bb684c34Spatrick MemoryBufferRef getCurrentMB(); 46bb684c34Spatrick 47ece8a530Spatrick private: 48ece8a530Spatrick void maybeSplitExpr(); 49ece8a530Spatrick StringRef getLine(); 50ece8a530Spatrick size_t getLineNumber(); 51ece8a530Spatrick size_t getColumnNumber(); 52ece8a530Spatrick }; 53ece8a530Spatrick 54*dfe94b16Srobert } // namespace lld::elf 55ece8a530Spatrick 56ece8a530Spatrick #endif 57