LLVM 20.0.0git
AsmLexer.h
Go to the documentation of this file.
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"
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
49
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
AsmLexer - Lexer class for assembly files.
Definition: AsmLexer.h:25
~AsmLexer() override
size_t peekTokens(MutableArrayRef< AsmToken > Buf, bool ShouldSkipSpace=true) override
Look ahead an arbitrary number of tokens.
Definition: AsmLexer.cpp:684
StringRef LexUntilEndOfStatement() override
Definition: AsmLexer.cpp:664
const MCAsmInfo & getMAI() const
Definition: AsmLexer.h:53
AsmLexer(const AsmLexer &)=delete
AsmLexer & operator=(const AsmLexer &)=delete
void setBuffer(StringRef Buf, const char *ptr=nullptr, bool EndStatementAtEOF=true)
Definition: AsmLexer.cpp:41
AsmToken LexToken() override
LexToken - Read the next token and return its code.
Definition: AsmLexer.cpp:730
Target independent representation for an assembler token.
Definition: MCAsmMacro.h:21
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
Generic assembler lexer interface, for use by target specific assembly lexers.
Definition: MCAsmLexer.h:37
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:310
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18