LLLexer.h revision d1e1703c39742f3c9fc3d27a442ff59bbdbfb5aa
1//===- LLLexer.h - Lexer for LLVM 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 represents the Lexer for .ll files. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LIB_ASMPARSER_LLLEXER_H 15#define LIB_ASMPARSER_LLLEXER_H 16 17#include "LLToken.h" 18#include "llvm/ADT/APSInt.h" 19#include "llvm/ADT/APFloat.h" 20#include "llvm/Support/SourceMgr.h" 21#include <string> 22 23namespace llvm { 24 class MemoryBuffer; 25 class Type; 26 class SMDiagnostic; 27 class LLVMContext; 28 29 class LLLexer { 30 const char *CurPtr; 31 MemoryBuffer *CurBuf; 32 SMDiagnostic &ErrorInfo; 33 SourceMgr &SM; 34 LLVMContext &Context; 35 36 // Information about the current token. 37 const char *TokStart; 38 lltok::Kind CurKind; 39 std::string StrVal; 40 unsigned UIntVal; 41 const Type *TyVal; 42 APFloat APFloatVal; 43 APSInt APSIntVal; 44 45 std::string TheError; 46 public: 47 explicit LLLexer(MemoryBuffer *StartBuf, SourceMgr &SM, SMDiagnostic &, 48 LLVMContext &C); 49 ~LLLexer() {} 50 51 lltok::Kind Lex() { 52 return CurKind = LexToken(); 53 } 54 55 typedef SMLoc LocTy; 56 LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); } 57 lltok::Kind getKind() const { return CurKind; } 58 const std::string &getStrVal() const { return StrVal; } 59 const Type *getTyVal() const { return TyVal; } 60 unsigned getUIntVal() const { return UIntVal; } 61 const APSInt &getAPSIntVal() const { return APSIntVal; } 62 const APFloat &getAPFloatVal() const { return APFloatVal; } 63 64 65 bool Error(LocTy L, const Twine &Msg) const; 66 bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); } 67 std::string getFilename() const; 68 69 private: 70 lltok::Kind LexToken(); 71 72 int getNextChar(); 73 void SkipLineComment(); 74 lltok::Kind LexIdentifier(); 75 lltok::Kind LexDigitOrNegative(); 76 lltok::Kind LexPositive(); 77 lltok::Kind LexAt(); 78 lltok::Kind LexExclaim(); 79 lltok::Kind LexPercent(); 80 lltok::Kind LexQuote(); 81 lltok::Kind Lex0x(); 82 83 uint64_t atoull(const char *Buffer, const char *End); 84 uint64_t HexIntToVal(const char *Buffer, const char *End); 85 void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]); 86 void FP80HexToIntPair(const char *Buff, const char *End, uint64_t Pair[2]); 87 }; 88} // end namespace llvm 89 90#endif 91