18e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner//===- LLLexer.h - Lexer for LLVM Assembly Files ----------------*- C++ -*-===// 28e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// 38e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// The LLVM Compiler Infrastructure 48e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 78e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// 88e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner//===----------------------------------------------------------------------===// 98e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// 108e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// This class represents the Lexer for .ll files. 118e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner// 128e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner//===----------------------------------------------------------------------===// 138e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner 148e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner#ifndef LIB_ASMPARSER_LLLEXER_H 158e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner#define LIB_ASMPARSER_LLLEXER_H 168e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner 17df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner#include "LLToken.h" 18df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner#include "llvm/ADT/APSInt.h" 19df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner#include "llvm/ADT/APFloat.h" 20eeb4a84ac8d91fb1d5a7c484a1c7047409faee30Chris Lattner#include "llvm/Support/SourceMgr.h" 215679d18c54ef46170e46f51bf471bb334f2b6525Misha Brukman#include <string> 228e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner 238e3a8e0452695643d04c21e15c94b802aef81baeChris Lattnernamespace llvm { 248e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner class MemoryBuffer; 25df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner class Type; 2692bcb426c3e4503c99324afd4ed0a73521711a56Chris Lattner class SMDiagnostic; 2712ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramer class LLVMContext; 289ea4034e007a83c778cd306ea66481be1317a51bMisha Brukman 298e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner class LLLexer { 308e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner const char *CurPtr; 318e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner MemoryBuffer *CurBuf; 3292bcb426c3e4503c99324afd4ed0a73521711a56Chris Lattner SMDiagnostic &ErrorInfo; 33eeb4a84ac8d91fb1d5a7c484a1c7047409faee30Chris Lattner SourceMgr &SM; 34ff6c91efcf62d1cb99343fdcb2de6271520a1981Owen Anderson LLVMContext &Context; 35df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner 36df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner // Information about the current token. 378e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner const char *TokStart; 38df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind CurKind; 39df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner std::string StrVal; 40df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner unsigned UIntVal; 411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *TyVal; 42df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner APFloat APFloatVal; 43df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner APSInt APSIntVal; 449ea4034e007a83c778cd306ea66481be1317a51bMisha Brukman 458e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner public: 46ff6c91efcf62d1cb99343fdcb2de6271520a1981Owen Anderson explicit LLLexer(MemoryBuffer *StartBuf, SourceMgr &SM, SMDiagnostic &, 47ff6c91efcf62d1cb99343fdcb2de6271520a1981Owen Anderson LLVMContext &C); 488e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner ~LLLexer() {} 498e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner 50df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind Lex() { 51df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner return CurKind = LexToken(); 52df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner } 53df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner 54eeb4a84ac8d91fb1d5a7c484a1c7047409faee30Chris Lattner typedef SMLoc LocTy; 55eeb4a84ac8d91fb1d5a7c484a1c7047409faee30Chris Lattner LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); } 56df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind getKind() const { return CurKind; } 5773180c5355bff75b2d9b0e1349f0898e4e60fe89Chris Lattner const std::string &getStrVal() const { return StrVal; } 581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *getTyVal() const { return TyVal; } 59df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner unsigned getUIntVal() const { return UIntVal; } 60df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner const APSInt &getAPSIntVal() const { return APSIntVal; } 61df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner const APFloat &getAPFloatVal() const { return APFloatVal; } 62df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner 639ea4034e007a83c778cd306ea66481be1317a51bMisha Brukman 64d1e1703c39742f3c9fc3d27a442ff59bbdbfb5aaBenjamin Kramer bool Error(LocTy L, const Twine &Msg) const; 65d1e1703c39742f3c9fc3d27a442ff59bbdbfb5aaBenjamin Kramer bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); } 66df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner std::string getFilename() const; 679ea4034e007a83c778cd306ea66481be1317a51bMisha Brukman 688e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner private: 69df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexToken(); 70df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner 718e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner int getNextChar(); 728e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner void SkipLineComment(); 739fa89334f1045b56e8ae409004e119d47ef17ec7Nick Lewycky lltok::Kind ReadString(lltok::Kind kind); 749fa89334f1045b56e8ae409004e119d47ef17ec7Nick Lewycky bool ReadVarName(); 759fa89334f1045b56e8ae409004e119d47ef17ec7Nick Lewycky 76df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexIdentifier(); 77df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexDigitOrNegative(); 78df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexPositive(); 79df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexAt(); 80e434d277ca5183eeb6f881000732dcf4c8edd52eChris Lattner lltok::Kind LexExclaim(); 81df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexPercent(); 82df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind LexQuote(); 83df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner lltok::Kind Lex0x(); 849ea4034e007a83c778cd306ea66481be1317a51bMisha Brukman 85df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner uint64_t atoull(const char *Buffer, const char *End); 86df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner uint64_t HexIntToVal(const char *Buffer, const char *End); 87df98617b23315e427cc4fad8ccfdd50d68bec2f9Chris Lattner void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]); 881b25cb2416c46a6cebf2a6c52235e9fe46a10d11Dale Johannesen void FP80HexToIntPair(const char *Buff, const char *End, uint64_t Pair[2]); 898e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner }; 908e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner} // end namespace llvm 918e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner 928e3a8e0452695643d04c21e15c94b802aef81baeChris Lattner#endif 93