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