Line data Source code
1 : //===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // This class declares the lexer for assembly files.
11 : //
12 : //===----------------------------------------------------------------------===//
13 :
14 : #ifndef LLVM_MC_MCPARSER_ASMLEXER_H
15 : #define LLVM_MC_MCPARSER_ASMLEXER_H
16 :
17 : #include "llvm/ADT/StringRef.h"
18 : #include "llvm/MC/MCParser/MCAsmLexer.h"
19 : #include <string>
20 :
21 : namespace llvm {
22 :
23 : class MCAsmInfo;
24 :
25 : /// AsmLexer - Lexer class for assembly files.
26 18514 : class AsmLexer : public MCAsmLexer {
27 : const MCAsmInfo &MAI;
28 :
29 : const char *CurPtr = nullptr;
30 : StringRef CurBuf;
31 : bool IsAtStartOfLine = true;
32 : bool IsAtStartOfStatement = true;
33 : bool IsParsingMSInlineAsm = false;
34 : bool IsPeeking = false;
35 :
36 : protected:
37 : /// LexToken - Read the next token and return its code.
38 : AsmToken LexToken() override;
39 :
40 : public:
41 : AsmLexer(const MCAsmInfo &MAI);
42 : AsmLexer(const AsmLexer &) = delete;
43 : AsmLexer &operator=(const AsmLexer &) = delete;
44 : ~AsmLexer() override;
45 :
46 : void setBuffer(StringRef Buf, const char *ptr = nullptr);
47 309 : void setParsingMSInlineAsm(bool V) { IsParsingMSInlineAsm = V; }
48 :
49 : StringRef LexUntilEndOfStatement() override;
50 :
51 : size_t peekTokens(MutableArrayRef<AsmToken> Buf,
52 : bool ShouldSkipSpace = true) override;
53 :
54 0 : const MCAsmInfo &getMAI() const { return MAI; }
55 :
56 : private:
57 : bool isAtStartOfComment(const char *Ptr);
58 : bool isAtStatementSeparator(const char *Ptr);
59 : int getNextChar();
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
|