AsmLexer.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This class declares the lexer for assembly files.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_MC_MCPARSER_ASMLEXER_H
15#define LLVM_MC_MCPARSER_ASMLEXER_H
16
17#include "llvm/ADT/StringRef.h"
18#include "llvm/MC/MCParser/MCAsmLexer.h"
19#include "llvm/Support/DataTypes.h"
20#include <string>
21
22namespace llvm {
23class MemoryBuffer;
24class MCAsmInfo;
25
26/// AsmLexer - Lexer class for assembly files.
27class AsmLexer : public MCAsmLexer {
28  const MCAsmInfo &MAI;
29
30  const char *CurPtr;
31  const MemoryBuffer *CurBuf;
32  bool isAtStartOfLine;
33
34  void operator=(const AsmLexer&) LLVM_DELETED_FUNCTION;
35  AsmLexer(const AsmLexer&) LLVM_DELETED_FUNCTION;
36
37protected:
38  /// LexToken - Read the next token and return its code.
39  AsmToken LexToken() override;
40
41public:
42  AsmLexer(const MCAsmInfo &MAI);
43  ~AsmLexer();
44
45  void setBuffer(const MemoryBuffer *buf, const char *ptr = NULL);
46
47  StringRef LexUntilEndOfStatement() override;
48  StringRef LexUntilEndOfLine();
49
50  const AsmToken peekTok(bool ShouldSkipSpace = true) override;
51
52  bool isAtStartOfComment(char Char);
53  bool isAtStatementSeparator(const char *Ptr);
54
55  const MCAsmInfo &getMAI() const { return MAI; }
56
57private:
58  int getNextChar();
59  AsmToken ReturnError(const char *Loc, const std::string &Msg);
60
61  AsmToken LexIdentifier();
62  AsmToken LexSlash();
63  AsmToken LexLineComment();
64  AsmToken LexDigit();
65  AsmToken LexSingleQuote();
66  AsmToken LexQuote();
67  AsmToken LexFloatLiteral();
68  AsmToken LexHexFloatLiteral(bool NoIntDigits);
69};
70
71} // end namespace llvm
72
73#endif
74