1193323Sed//===- LLLexer.h - Lexer for LLVM Assembly Files ----------------*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This class represents the Lexer for .ll files. 11193323Sed// 12193323Sed//===----------------------------------------------------------------------===// 13193323Sed 14280031Sdim#ifndef LLVM_LIB_ASMPARSER_LLLEXER_H 15280031Sdim#define LLVM_LIB_ASMPARSER_LLLEXER_H 16193323Sed 17193323Sed#include "LLToken.h" 18249423Sdim#include "llvm/ADT/APFloat.h" 19193323Sed#include "llvm/ADT/APSInt.h" 20195340Sed#include "llvm/Support/SourceMgr.h" 21193323Sed#include <string> 22193323Sed 23193323Sednamespace llvm { 24193323Sed class MemoryBuffer; 25193323Sed class Type; 26195340Sed class SMDiagnostic; 27198090Srdivacky class LLVMContext; 28193323Sed 29193323Sed class LLLexer { 30193323Sed const char *CurPtr; 31280031Sdim StringRef CurBuf; 32195340Sed SMDiagnostic &ErrorInfo; 33195340Sed SourceMgr &SM; 34198090Srdivacky LLVMContext &Context; 35193323Sed 36193323Sed // Information about the current token. 37193323Sed const char *TokStart; 38193323Sed lltok::Kind CurKind; 39193323Sed std::string StrVal; 40193323Sed unsigned UIntVal; 41224145Sdim Type *TyVal; 42193323Sed APFloat APFloatVal; 43193323Sed APSInt APSIntVal; 44193323Sed 45193323Sed public: 46280031Sdim explicit LLLexer(StringRef StartBuf, SourceMgr &SM, SMDiagnostic &, 47198090Srdivacky LLVMContext &C); 48193323Sed 49193323Sed lltok::Kind Lex() { 50193323Sed return CurKind = LexToken(); 51193323Sed } 52193323Sed 53195340Sed typedef SMLoc LocTy; 54195340Sed LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); } 55193323Sed lltok::Kind getKind() const { return CurKind; } 56206083Srdivacky const std::string &getStrVal() const { return StrVal; } 57224145Sdim Type *getTyVal() const { return TyVal; } 58193323Sed unsigned getUIntVal() const { return UIntVal; } 59193323Sed const APSInt &getAPSIntVal() const { return APSIntVal; } 60193323Sed const APFloat &getAPFloatVal() const { return APFloatVal; } 61193323Sed 62193323Sed 63218893Sdim bool Error(LocTy L, const Twine &Msg) const; 64218893Sdim bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); } 65276479Sdim 66276479Sdim void Warning(LocTy WarningLoc, const Twine &Msg) const; 67276479Sdim void Warning(const Twine &Msg) const { return Warning(getLoc(), Msg); } 68276479Sdim 69193323Sed private: 70193323Sed lltok::Kind LexToken(); 71193323Sed 72193323Sed int getNextChar(); 73193323Sed void SkipLineComment(); 74223017Sdim lltok::Kind ReadString(lltok::Kind kind); 75223017Sdim bool ReadVarName(); 76223017Sdim 77193323Sed lltok::Kind LexIdentifier(); 78193323Sed lltok::Kind LexDigitOrNegative(); 79193323Sed lltok::Kind LexPositive(); 80193323Sed lltok::Kind LexAt(); 81276479Sdim lltok::Kind LexDollar(); 82201360Srdivacky lltok::Kind LexExclaim(); 83193323Sed lltok::Kind LexPercent(); 84280031Sdim lltok::Kind LexVar(lltok::Kind Var, lltok::Kind VarID); 85193323Sed lltok::Kind LexQuote(); 86193323Sed lltok::Kind Lex0x(); 87249423Sdim lltok::Kind LexHash(); 88193323Sed 89193323Sed uint64_t atoull(const char *Buffer, const char *End); 90193323Sed uint64_t HexIntToVal(const char *Buffer, const char *End); 91193323Sed void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]); 92193323Sed void FP80HexToIntPair(const char *Buff, const char *End, uint64_t Pair[2]); 93193323Sed }; 94193323Sed} // end namespace llvm 95193323Sed 96193323Sed#endif 97