Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.  
  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.  
  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.  
  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
  77.