AsmLexer.h revision 258281d8ac7b6ab61d64948340038e5f6692e3c0
1a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===// 2a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// 3a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// The LLVM Compiler Infrastructure 4a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// 5a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// This file is distributed under the University of Illinois Open Source 6a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// License. See LICENSE.TXT for details. 7a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// 8a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner//===----------------------------------------------------------------------===// 9a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// 10a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// This class declares the lexer for assembly files. 11a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner// 12a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner//===----------------------------------------------------------------------===// 13a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 14a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#ifndef ASMLEXER_H 15a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#define ASMLEXER_H 16a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 179a7e2ccf574368b60455f8c8975030475a1f3ce0Daniel Dunbar#include "llvm/ADT/StringRef.h" 18dbd692a66e6a5f60ec3ff120ed27ae3a918c375fDaniel Dunbar#include "llvm/MC/MCAsmLexer.h" 199823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderby#include "llvm/MC/MCAsmInfo.h" 208b67f774e9c38b7718b2b300b628388f966df4e0Chandler Carruth#include "llvm/System/DataTypes.h" 21a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#include <string> 22a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#include <cassert> 23a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 24a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnernamespace llvm { 25a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass MemoryBuffer; 26a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass SourceMgr; 27a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass SMLoc; 289823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderbyclass MCAsmInfo; 29a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 30a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner/// AsmLexer - Lexer class for assembly files. 31dbd692a66e6a5f60ec3ff120ed27ae3a918c375fDaniel Dunbarclass AsmLexer : public MCAsmLexer { 32a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner SourceMgr &SrcMgr; 33cec545097cf1a81c0936cf62e39a81940d9f720fChris Lattner const MCAsmInfo &MAI; 34a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 35a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner const char *CurPtr; 36a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner const MemoryBuffer *CurBuf; 37a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 38a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner const char *TokStart; 39cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar 40cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar /// This is the current buffer index we're lexing from as managed by the 41cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar /// SourceMgr object. 42a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner int CurBuffer; 43a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 44faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner void operator=(const AsmLexer&); // DO NOT IMPLEMENT 45faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner AsmLexer(const AsmLexer&); // DO NOT IMPLEMENT 46cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar 47cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbarprotected: 48cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar /// LexToken - Read the next token and return its code. 49cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar virtual AsmToken LexToken(); 50cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar 51a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerpublic: 529823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderby AsmLexer(SourceMgr &SrcMgr, const MCAsmInfo &MAI); 53faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner ~AsmLexer(); 54a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 55a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner SMLoc getLoc() const; 56ff4bc460c52c1f285d8a56da173641bf92d49e3fChris Lattner 57ff4bc460c52c1f285d8a56da173641bf92d49e3fChris Lattner StringRef LexUntilEndOfStatement(); 58b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby 59b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby bool isAtStartOfComment(char Char); 60cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar 618e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner /// EnterIncludeFile - Enter the specified file. This returns true on failure. 628e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner bool EnterIncludeFile(const std::string &Filename); 638e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner 643fb7683bec8c8edb24e80c95f3b0668c6ecc0ae6Daniel Dunbar void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const; 65258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner 66258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner const MCAsmInfo &getMAI() const { return MAI; } 67258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner 68a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerprivate: 69a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner int getNextChar(); 70cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken ReturnError(const char *Loc, const std::string &Msg); 71a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 72cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexIdentifier(); 73cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexSlash(); 74cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexLineComment(); 75cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexDigit(); 76cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexQuote(); 77a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner}; 78a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 79a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner} // end namespace llvm 80a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 81a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#endif 82