Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- LLLexer.h - Lexer for LLVM 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 represents the Lexer for .ll files.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_ASMPARSER_LLLEXER_H
  14. #define LLVM_ASMPARSER_LLLEXER_H
  15.  
  16. #include "LLToken.h"
  17. #include "llvm/ADT/APFloat.h"
  18. #include "llvm/ADT/APSInt.h"
  19. #include "llvm/Support/SMLoc.h"
  20. #include <string>
  21.  
  22. namespace llvm {
  23.   class Type;
  24.   class SMDiagnostic;
  25.   class SourceMgr;
  26.   class LLVMContext;
  27.  
  28.   class LLLexer {
  29.     const char *CurPtr;
  30.     StringRef CurBuf;
  31.     SMDiagnostic &ErrorInfo;
  32.     SourceMgr &SM;
  33.     LLVMContext &Context;
  34.  
  35.     // Information about the current token.
  36.     const char *TokStart;
  37.     lltok::Kind CurKind;
  38.     std::string StrVal;
  39.     unsigned UIntVal;
  40.     Type *TyVal = nullptr;
  41.     APFloat APFloatVal;
  42.     APSInt  APSIntVal;
  43.  
  44.     // When false (default), an identifier ending in ':' is a label token.
  45.     // When true, the ':' is treated as a separate token.
  46.     bool IgnoreColonInIdentifiers;
  47.  
  48.   public:
  49.     explicit LLLexer(StringRef StartBuf, SourceMgr &SM, SMDiagnostic &,
  50.                      LLVMContext &C);
  51.  
  52.     lltok::Kind Lex() {
  53.       return CurKind = LexToken();
  54.     }
  55.  
  56.     typedef SMLoc LocTy;
  57.     LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); }
  58.     lltok::Kind getKind() const { return CurKind; }
  59.     const std::string &getStrVal() const { return StrVal; }
  60.     Type *getTyVal() const { return TyVal; }
  61.     unsigned getUIntVal() const { return UIntVal; }
  62.     const APSInt &getAPSIntVal() const { return APSIntVal; }
  63.     const APFloat &getAPFloatVal() const { return APFloatVal; }
  64.  
  65.     void setIgnoreColonInIdentifiers(bool val) {
  66.       IgnoreColonInIdentifiers = val;
  67.     }
  68.  
  69.     bool Error(LocTy ErrorLoc, const Twine &Msg) const;
  70.     bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); }
  71.  
  72.     void Warning(LocTy WarningLoc, const Twine &Msg) const;
  73.     void Warning(const Twine &Msg) const { return Warning(getLoc(), Msg); }
  74.  
  75.   private:
  76.     lltok::Kind LexToken();
  77.  
  78.     int getNextChar();
  79.     void SkipLineComment();
  80.     lltok::Kind ReadString(lltok::Kind kind);
  81.     bool ReadVarName();
  82.  
  83.     lltok::Kind LexIdentifier();
  84.     lltok::Kind LexDigitOrNegative();
  85.     lltok::Kind LexPositive();
  86.     lltok::Kind LexAt();
  87.     lltok::Kind LexDollar();
  88.     lltok::Kind LexExclaim();
  89.     lltok::Kind LexPercent();
  90.     lltok::Kind LexUIntID(lltok::Kind Token);
  91.     lltok::Kind LexVar(lltok::Kind Var, lltok::Kind VarID);
  92.     lltok::Kind LexQuote();
  93.     lltok::Kind Lex0x();
  94.     lltok::Kind LexHash();
  95.     lltok::Kind LexCaret();
  96.  
  97.     uint64_t atoull(const char *Buffer, const char *End);
  98.     uint64_t HexIntToVal(const char *Buffer, const char *End);
  99.     void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]);
  100.     void FP80HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]);
  101.   };
  102. } // end namespace llvm
  103.  
  104. #endif
  105.