1//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This class declares the lexer for assembly files.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_MC_MCPARSER_ASMLEXER_H
14#define LLVM_MC_MCPARSER_ASMLEXER_H
15
16#include "llvm/ADT/StringRef.h"
17#include "llvm/MC/MCParser/MCAsmLexer.h"
18#include <string>
19
20namespace llvm {
21
22class MCAsmInfo;
23
24/// AsmLexer - Lexer class for assembly files.
25class AsmLexer : public MCAsmLexer {
26 const MCAsmInfo &MAI;
27
28 const char *CurPtr = nullptr;
29 StringRef CurBuf;
30 bool IsAtStartOfLine = true;
31 bool IsAtStartOfStatement = true;
32 bool IsPeeking = false;
33 bool EndStatementAtEOF = true;
34
35protected:
36 /// LexToken - Read the next token and return its code.
37 AsmToken LexToken() override;
38
39public:
40 AsmLexer(const MCAsmInfo &MAI);
41 AsmLexer(const AsmLexer &) = delete;
42 AsmLexer &operator=(const AsmLexer &) = delete;
43 ~AsmLexer() override;
44
45 void setBuffer(StringRef Buf, const char *ptr = nullptr,
46 bool EndStatementAtEOF = true);
47
48 StringRef LexUntilEndOfStatement() override;
49
50 size_t peekTokens(MutableArrayRef<AsmToken> Buf,
51 bool ShouldSkipSpace = true) override;
52
53 const MCAsmInfo &getMAI() const { return MAI; }
54
55private:
56 bool isAtStartOfComment(const char *Ptr);
57 bool isAtStatementSeparator(const char *Ptr);
58 [[nodiscard]] int getNextChar();
59 int peekNextChar();
60 AsmToken ReturnError(const char *Loc, const std::string &Msg);
61
62 AsmToken LexIdentifier();
63 AsmToken LexSlash();
64 AsmToken LexLineComment();
65 AsmToken LexDigit();
66 AsmToken LexSingleQuote();
67 AsmToken LexQuote();
68 AsmToken LexFloatLiteral();
69 AsmToken LexHexFloatLiteral(bool NoIntDigits);
70
71 StringRef LexUntilEndOfLine();
72};
73
74} // end namespace llvm
75
76#endif // LLVM_MC_MCPARSER_ASMLEXER_H
77

source code of llvm/include/llvm/MC/MCParser/AsmLexer.h