LLVM  14.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 
20 namespace llvm {
21 
22 class MCAsmInfo;
23 
24 /// AsmLexer - Lexer class for assembly files.
25 class 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 
35 protected:
36  /// LexToken - Read the next token and return its code.
37  AsmToken LexToken() override;
38 
39 public:
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 
55 private:
56  bool isAtStartOfComment(const char *Ptr);
57  bool isAtStatementSeparator(const char *Ptr);
58  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
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AllocatorList.h:23
llvm::MCAsmLexer
Generic assembler lexer interface, for use by target specific assembly lexers.
Definition: MCAsmLexer.h:39
StringRef.h
llvm::MCAsmInfo
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
llvm::AsmLexer::LexUntilEndOfStatement
StringRef LexUntilEndOfStatement() override
Definition: AsmLexer.cpp:665
llvm::AsmLexer::setBuffer
void setBuffer(StringRef Buf, const char *ptr=nullptr, bool EndStatementAtEOF=true)
Definition: AsmLexer.cpp:41
llvm::AsmToken
Target independent representation for an assembler token.
Definition: MCAsmMacro.h:21
llvm::MutableArrayRef
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:305
llvm::AsmLexer::LexToken
AsmToken LexToken() override
LexToken - Read the next token and return its code.
Definition: AsmLexer.cpp:731
llvm::AsmLexer::~AsmLexer
~AsmLexer() override
MCAsmLexer.h
llvm::AsmLexer::getMAI
const MCAsmInfo & getMAI() const
Definition: AsmLexer.h:53
llvm::AsmLexer::AsmLexer
AsmLexer(const MCAsmInfo &MAI)
Definition: AsmLexer.cpp:34
llvm::AsmLexer::operator=
AsmLexer & operator=(const AsmLexer &)=delete
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
llvm::AsmLexer::peekTokens
size_t peekTokens(MutableArrayRef< AsmToken > Buf, bool ShouldSkipSpace=true) override
Look ahead an arbitrary number of tokens.
Definition: AsmLexer.cpp:685
llvm::AsmLexer
AsmLexer - Lexer class for assembly files.
Definition: AsmLexer.h:25