//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===//
 
//
 
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 
// See https://llvm.org/LICENSE.txt for license information.
 
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
//
 
//===----------------------------------------------------------------------===//
 
//
 
// This class declares the lexer for assembly files.
 
//
 
//===----------------------------------------------------------------------===//
 
 
 
#ifndef LLVM_MC_MCPARSER_ASMLEXER_H
 
#define LLVM_MC_MCPARSER_ASMLEXER_H
 
 
 
#include "llvm/ADT/StringRef.h"
 
#include "llvm/MC/MCParser/MCAsmLexer.h"
 
#include <string>
 
 
 
namespace llvm {
 
 
 
class MCAsmInfo;
 
 
 
/// AsmLexer - Lexer class for assembly files.
 
class AsmLexer : public MCAsmLexer {
 
  const MCAsmInfo &MAI;
 
 
 
  const char *CurPtr = nullptr;
 
  StringRef CurBuf;
 
  bool IsAtStartOfLine = true;
 
  bool IsAtStartOfStatement = true;
 
  bool IsPeeking = false;
 
  bool EndStatementAtEOF = true;
 
 
 
protected:
 
  /// LexToken - Read the next token and return its code.
 
  AsmToken LexToken() override;
 
 
 
public:
 
  AsmLexer(const MCAsmInfo &MAI);
 
  AsmLexer(const AsmLexer &) = delete;
 
  AsmLexer &operator=(const AsmLexer &) = delete;
 
  ~AsmLexer() override;
 
 
 
  void setBuffer(StringRef Buf, const char *ptr = nullptr,
 
                 bool EndStatementAtEOF = true);
 
 
 
  StringRef LexUntilEndOfStatement() override;
 
 
 
  size_t peekTokens(MutableArrayRef<AsmToken> Buf,
 
                    bool ShouldSkipSpace = true) override;
 
 
 
  const MCAsmInfo &getMAI() const { return MAI; }
 
 
 
private:
 
  bool isAtStartOfComment(const char *Ptr);
 
  bool isAtStatementSeparator(const char *Ptr);
 
  int getNextChar();
 
  int peekNextChar();
 
  AsmToken ReturnError(const char *Loc, const std::string &Msg);
 
 
 
  AsmToken LexIdentifier();
 
  AsmToken LexSlash();
 
  AsmToken LexLineComment();
 
  AsmToken LexDigit();
 
  AsmToken LexSingleQuote();
 
  AsmToken LexQuote();
 
  AsmToken LexFloatLiteral();
 
  AsmToken LexHexFloatLiteral(bool NoIntDigits);
 
 
 
  StringRef LexUntilEndOfLine();
 
};
 
 
 
} // end namespace llvm
 
 
 
#endif // LLVM_MC_MCPARSER_ASMLEXER_H