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 14674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_MC_MCPARSER_ASMLEXER_H 15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_MC_MCPARSER_ASMLEXER_H 16a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 179a7e2ccf574368b60455f8c8975030475a1f3ce0Daniel Dunbar#include "llvm/ADT/StringRef.h" 18c6ef277a0b8f43af22d86aea9d5053749cacfbbbChris Lattner#include "llvm/MC/MCParser/MCAsmLexer.h" 191f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 20a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#include <string> 21a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 22a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnernamespace llvm { 23a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass MemoryBuffer; 249823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderbyclass MCAsmInfo; 25a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 26a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner/// AsmLexer - Lexer class for assembly files. 27dbd692a66e6a5f60ec3ff120ed27ae3a918c375fDaniel Dunbarclass AsmLexer : public MCAsmLexer { 28cec545097cf1a81c0936cf62e39a81940d9f720fChris Lattner const MCAsmInfo &MAI; 29e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 30a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner const char *CurPtr; 31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines StringRef CurBuf; 326148225b9590f18fcb6a1d3151d3158b316965e0Jim Grosbach bool isAtStartOfLine; 33e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 341f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper void operator=(const AsmLexer&) LLVM_DELETED_FUNCTION; 351f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper AsmLexer(const AsmLexer&) LLVM_DELETED_FUNCTION; 36cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar 37cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbarprotected: 38cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar /// LexToken - Read the next token and return its code. 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines AsmToken LexToken() override; 40cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar 41a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerpublic: 42fd0b0288e2ee5ccf3f1d47090542710c67a77cf7Sean Callanan AsmLexer(const MCAsmInfo &MAI); 43faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner ~AsmLexer(); 44e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void setBuffer(StringRef Buf, const char *ptr = nullptr); 46e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines StringRef LexUntilEndOfStatement() override; 48f1c21a8da6ed27a6ab4944e30bbeb4bd3ee08a71Kevin Enderby StringRef LexUntilEndOfLine(); 49b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const AsmToken peekTok(bool ShouldSkipSpace = true) override; 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 52b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby bool isAtStartOfComment(char Char); 53d31d304f83f9c8df6870057509414b8d004bc8daJim Grosbach bool isAtStatementSeparator(const char *Ptr); 54e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 55258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner const MCAsmInfo &getMAI() const { return MAI; } 56258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner 57a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerprivate: 58a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner int getNextChar(); 59cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken ReturnError(const char *Loc, const std::string &Msg); 60a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 61cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexIdentifier(); 62cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexSlash(); 63cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexLineComment(); 64cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexDigit(); 657529b164104f802b59fbf96f5a88d9709ac3ff1aRoman Divacky AsmToken LexSingleQuote(); 66cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar AsmToken LexQuote(); 674f2afe3d399eb9485dc605f3cc3a6382dcae757aDaniel Dunbar AsmToken LexFloatLiteral(); 68337439d12d2e2a9e820e0aeee261bbdb935fc0a5Tim Northover AsmToken LexHexFloatLiteral(bool NoIntDigits); 69a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner}; 70e5ec5a41775c6ef1a69070c218fb4b6b4775ca41Jim Grosbach 71a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner} // end namespace llvm 72a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner 73a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#endif 74