194b9550a32d189704a8eae55505edf62662c0534Evan Cheng//===-- llvm/MC/MCTargetAsmLexer.h - Target Assembly Lexer ------*- C++ -*-===// 2af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// 3af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// The LLVM Compiler Infrastructure 4af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// 5af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// This file is distributed under the University of Illinois Open Source 6af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// License. See LICENSE.TXT for details. 7af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner// 8af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner//===----------------------------------------------------------------------===// 9af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner 1094b9550a32d189704a8eae55505edf62662c0534Evan Cheng#ifndef LLVM_MC_MCTARGETASMLEXER_H 1194b9550a32d189704a8eae55505edf62662c0534Evan Cheng#define LLVM_MC_MCTARGETASMLEXER_H 12af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner 13563515620336138c108febe0f5179594b071c896Sean Callanan#include "llvm/MC/MCParser/MCAsmLexer.h" 14563515620336138c108febe0f5179594b071c896Sean Callanan 15af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattnernamespace llvm { 16af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattnerclass Target; 17639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 1894b9550a32d189704a8eae55505edf62662c0534Evan Cheng/// MCTargetAsmLexer - Generic interface to target specific assembly lexers. 1994b9550a32d189704a8eae55505edf62662c0534Evan Chengclass MCTargetAsmLexer { 20563515620336138c108febe0f5179594b071c896Sean Callanan /// The current token 21563515620336138c108febe0f5179594b071c896Sean Callanan AsmToken CurTok; 22639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 23563515620336138c108febe0f5179594b071c896Sean Callanan /// The location and description of the current error 24563515620336138c108febe0f5179594b071c896Sean Callanan SMLoc ErrLoc; 25563515620336138c108febe0f5179594b071c896Sean Callanan std::string Err; 26639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 271f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper MCTargetAsmLexer(const MCTargetAsmLexer &) LLVM_DELETED_FUNCTION; 281f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper void operator=(const MCTargetAsmLexer &) LLVM_DELETED_FUNCTION; 29af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattnerprotected: // Can only create subclasses. 3094b9550a32d189704a8eae55505edf62662c0534Evan Cheng MCTargetAsmLexer(const Target &); 31639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 32563515620336138c108febe0f5179594b071c896Sean Callanan virtual AsmToken LexToken() = 0; 33639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 34563515620336138c108febe0f5179594b071c896Sean Callanan void SetError(const SMLoc &errLoc, const std::string &err) { 35563515620336138c108febe0f5179594b071c896Sean Callanan ErrLoc = errLoc; 36563515620336138c108febe0f5179594b071c896Sean Callanan Err = err; 37563515620336138c108febe0f5179594b071c896Sean Callanan } 38639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 39af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner /// TheTarget - The Target that this machine was created for. 40af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner const Target &TheTarget; 41894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan MCAsmLexer *Lexer; 42639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 43af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattnerpublic: 4494b9550a32d189704a8eae55505edf62662c0534Evan Cheng virtual ~MCTargetAsmLexer(); 45639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 46af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner const Target &getTarget() const { return TheTarget; } 47639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 48894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan /// InstallLexer - Set the lexer to get tokens from lower-level lexer \arg L. 49894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan void InstallLexer(MCAsmLexer &L) { 50894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan Lexer = &L; 51894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan } 52639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 53894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan MCAsmLexer *getLexer() { 54894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan return Lexer; 55894c1af05fb3f0d8e2ee6565816fa220b260ed9dSean Callanan } 56639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 57563515620336138c108febe0f5179594b071c896Sean Callanan /// Lex - Consume the next token from the input stream and return it. 58563515620336138c108febe0f5179594b071c896Sean Callanan const AsmToken &Lex() { 59563515620336138c108febe0f5179594b071c896Sean Callanan return CurTok = LexToken(); 60563515620336138c108febe0f5179594b071c896Sean Callanan } 61639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 62563515620336138c108febe0f5179594b071c896Sean Callanan /// getTok - Get the current (last) lexed token. 63563515620336138c108febe0f5179594b071c896Sean Callanan const AsmToken &getTok() { 64563515620336138c108febe0f5179594b071c896Sean Callanan return CurTok; 65563515620336138c108febe0f5179594b071c896Sean Callanan } 66639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 67563515620336138c108febe0f5179594b071c896Sean Callanan /// getErrLoc - Get the current error location 68563515620336138c108febe0f5179594b071c896Sean Callanan const SMLoc &getErrLoc() { 69563515620336138c108febe0f5179594b071c896Sean Callanan return ErrLoc; 70563515620336138c108febe0f5179594b071c896Sean Callanan } 71639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 72563515620336138c108febe0f5179594b071c896Sean Callanan /// getErr - Get the current error string 73563515620336138c108febe0f5179594b071c896Sean Callanan const std::string &getErr() { 74563515620336138c108febe0f5179594b071c896Sean Callanan return Err; 75563515620336138c108febe0f5179594b071c896Sean Callanan } 76639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 77563515620336138c108febe0f5179594b071c896Sean Callanan /// getKind - Get the kind of current token. 78563515620336138c108febe0f5179594b071c896Sean Callanan AsmToken::TokenKind getKind() const { return CurTok.getKind(); } 79639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 80563515620336138c108febe0f5179594b071c896Sean Callanan /// is - Check if the current token has kind \arg K. 81563515620336138c108febe0f5179594b071c896Sean Callanan bool is(AsmToken::TokenKind K) const { return CurTok.is(K); } 82639aa87bee77fe2d83f0978ae1eea53e49def324Jim Grosbach 83563515620336138c108febe0f5179594b071c896Sean Callanan /// isNot - Check if the current token has kind \arg K. 84563515620336138c108febe0f5179594b071c896Sean Callanan bool isNot(AsmToken::TokenKind K) const { return CurTok.isNot(K); } 85af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner}; 86af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner 87af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner} // End llvm namespace 88af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner 89af0d301f43ddc61582c5ceb3b9e0492d71dc4330Chris Lattner#endif 90