AsmLexer.h revision e5ec5a41775c6ef1a69070c218fb4b6b4775ca41
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 ASMLEXER_H
15#define ASMLEXER_H
16
17#include "llvm/ADT/StringRef.h"
18#include "llvm/MC/MCParser/MCAsmLexer.h"
19#include "llvm/MC/MCAsmInfo.h"
20#include "llvm/Support/DataTypes.h"
21#include <string>
22#include <cassert>
23
24namespace llvm {
25class MemoryBuffer;
26class SMLoc;
27class MCAsmInfo;
28
29/// AsmLexer - Lexer class for assembly files.
30class AsmLexer : public MCAsmLexer {
31  const MCAsmInfo &MAI;
32
33  const char *CurPtr;
34  const MemoryBuffer *CurBuf;
35
36  void operator=(const AsmLexer&); // DO NOT IMPLEMENT
37  AsmLexer(const AsmLexer&);       // DO NOT IMPLEMENT
38
39protected:
40  /// LexToken - Read the next token and return its code.
41  virtual AsmToken LexToken();
42
43public:
44  AsmLexer(const MCAsmInfo &MAI);
45  ~AsmLexer();
46
47  void setBuffer(const MemoryBuffer *buf, const char *ptr = NULL);
48
49  virtual StringRef LexUntilEndOfStatement();
50
51  bool isAtStartOfComment(char Char);
52
53  const MCAsmInfo &getMAI() const { return MAI; }
54
55private:
56  int getNextChar();
57  AsmToken ReturnError(const char *Loc, const std::string &Msg);
58
59  AsmToken LexIdentifier();
60  AsmToken LexSlash();
61  AsmToken LexLineComment();
62  AsmToken LexDigit();
63  AsmToken LexSingleQuote();
64  AsmToken LexQuote();
65  AsmToken LexFloatLiteral();
66};
67
68} // end namespace llvm
69
70#endif
71