LLVM  9.0.0svn
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 
34 protected:
35  /// LexToken - Read the next token and return its code.
36  AsmToken LexToken() override;
37 
38 public:
39  AsmLexer(const MCAsmInfo &MAI);
40  AsmLexer(const AsmLexer &) = delete;
41  AsmLexer &operator=(const AsmLexer &) = delete;
42  ~AsmLexer() override;
43 
44  void setBuffer(StringRef Buf, const char *ptr = nullptr);
45 
47 
49  bool ShouldSkipSpace = true) override;
50 
51  const MCAsmInfo &getMAI() const { return MAI; }
52 
53 private:
54  bool isAtStartOfComment(const char *Ptr);
55  bool isAtStatementSeparator(const char *Ptr);
56  int getNextChar();
57  AsmToken ReturnError(const char *Loc, const std::string &Msg);
58 
59  AsmToken LexIdentifier();
60  AsmToken LexSlash();
61  AsmToken LexLineComment();
62  AsmToken LexDigit();
63  AsmToken LexSingleQuote();
64  AsmToken LexQuote();
65  AsmToken LexFloatLiteral();
66  AsmToken LexHexFloatLiteral(bool NoIntDigits);
67 
68  StringRef LexUntilEndOfLine();
69 };
70 
71 } // end namespace llvm
72 
73 #endif // LLVM_MC_MCPARSER_ASMLEXER_H
const MCAsmInfo & getMAI() const
Definition: AsmLexer.h:51
This class represents lattice values for constants.
Definition: AllocatorList.h:23
AsmLexer & operator=(const AsmLexer &)=delete
AsmLexer - Lexer class for assembly files.
Definition: AsmLexer.h:25
void setBuffer(StringRef Buf, const char *ptr=nullptr)
Definition: AsmLexer.cpp:39
Generic assembler lexer interface, for use by target specific assembly lexers.
Definition: MCAsmLexer.h:39
Target independent representation for an assembler token.
Definition: MCAsmMacro.h:21
size_t peekTokens(MutableArrayRef< AsmToken > Buf, bool ShouldSkipSpace=true) override
Look ahead an arbitrary number of tokens.
Definition: AsmLexer.cpp:508
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:55
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:290
StringRef LexUntilEndOfStatement() override
Definition: AsmLexer.cpp:488
~AsmLexer() override
AsmToken LexToken() override
LexToken - Read the next token and return its code.
Definition: AsmLexer.cpp:551
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
AsmLexer(const MCAsmInfo &MAI)
Definition: AsmLexer.cpp:33