AsmLexer.h revision be343b3ca3f53d5d5e29f3591af8b9bb831daa98
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/System/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  const char *TokStart;
37
38  void operator=(const AsmLexer&); // DO NOT IMPLEMENT
39  AsmLexer(const AsmLexer&);       // DO NOT IMPLEMENT
40
41protected:
42  /// LexToken - Read the next token and return its code.
43  virtual AsmToken LexToken();
44
45public:
46  AsmLexer(const MCAsmInfo &MAI);
47  ~AsmLexer();
48
49  void setBuffer(const MemoryBuffer *buf, const char *ptr = NULL);
50
51  SMLoc getLoc() const;
52
53  StringRef LexUntilEndOfStatement();
54
55  bool isAtStartOfComment(char Char);
56
57  const MCAsmInfo &getMAI() const { return MAI; }
58
59private:
60  int getNextChar();
61  AsmToken ReturnError(const char *Loc, const std::string &Msg);
62
63  AsmToken LexIdentifier();
64  AsmToken LexSlash();
65  AsmToken LexLineComment();
66  AsmToken LexDigit();
67  AsmToken LexQuote();
68};
69
70} // end namespace llvm
71
72#endif
73