AsmLexer.h revision 258281d8ac7b6ab61d64948340038e5f6692e3c0
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
14a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#ifndef ASMLEXER_H
15a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#define ASMLEXER_H
16a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
179a7e2ccf574368b60455f8c8975030475a1f3ce0Daniel Dunbar#include "llvm/ADT/StringRef.h"
18dbd692a66e6a5f60ec3ff120ed27ae3a918c375fDaniel Dunbar#include "llvm/MC/MCAsmLexer.h"
199823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderby#include "llvm/MC/MCAsmInfo.h"
208b67f774e9c38b7718b2b300b628388f966df4e0Chandler Carruth#include "llvm/System/DataTypes.h"
21a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#include <string>
22a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#include <cassert>
23a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
24a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnernamespace llvm {
25a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass MemoryBuffer;
26a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass SourceMgr;
27a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerclass SMLoc;
289823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderbyclass MCAsmInfo;
29a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
30a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner/// AsmLexer - Lexer class for assembly files.
31dbd692a66e6a5f60ec3ff120ed27ae3a918c375fDaniel Dunbarclass AsmLexer : public MCAsmLexer {
32a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  SourceMgr &SrcMgr;
33cec545097cf1a81c0936cf62e39a81940d9f720fChris Lattner  const MCAsmInfo &MAI;
34a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
35a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  const char *CurPtr;
36a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  const MemoryBuffer *CurBuf;
37a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
38a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  const char *TokStart;
39cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar
40cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  /// This is the current buffer index we're lexing from as managed by the
41cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  /// SourceMgr object.
42a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  int CurBuffer;
43a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
44faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner  void operator=(const AsmLexer&); // DO NOT IMPLEMENT
45faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner  AsmLexer(const AsmLexer&);       // DO NOT IMPLEMENT
46cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar
47cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbarprotected:
48cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar  /// LexToken - Read the next token and return its code.
49cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar  virtual AsmToken LexToken();
50cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar
51a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerpublic:
529823ca971d5cb475401e59fde244caf5087c74a1Kevin Enderby  AsmLexer(SourceMgr &SrcMgr, const MCAsmInfo &MAI);
53faf32c102db556e367af1e5bca7359160840d2d0Chris Lattner  ~AsmLexer();
54a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
55a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  SMLoc getLoc() const;
56ff4bc460c52c1f285d8a56da173641bf92d49e3fChris Lattner
57ff4bc460c52c1f285d8a56da173641bf92d49e3fChris Lattner  StringRef LexUntilEndOfStatement();
58b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby
59b5db83084073d74501f3e2a7684d28240a047b92Kevin Enderby  bool isAtStartOfComment(char Char);
60cbbe2484418536264b1a26c517c16d505a61d5c8Daniel Dunbar
618e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner  /// EnterIncludeFile - Enter the specified file. This returns true on failure.
628e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner  bool EnterIncludeFile(const std::string &Filename);
638e25e2d801bb1119cea080c7c860adcfbf85d65dChris Lattner
643fb7683bec8c8edb24e80c95f3b0668c6ecc0ae6Daniel Dunbar  void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const;
65258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner
66258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner  const MCAsmInfo &getMAI() const { return MAI; }
67258281d8ac7b6ab61d64948340038e5f6692e3c0Chris Lattner
68a59e8779964992457ada1af6a5f48068523cfd42Chris Lattnerprivate:
69a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner  int getNextChar();
70cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken ReturnError(const char *Loc, const std::string &Msg);
71a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
72cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken LexIdentifier();
73cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken LexSlash();
74cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken LexLineComment();
75cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken LexDigit();
76cb358b63a742c72f440ea008f14d65e049e725adDaniel Dunbar  AsmToken LexQuote();
77a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner};
78a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
79a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner} // end namespace llvm
80a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner
81a59e8779964992457ada1af6a5f48068523cfd42Chris Lattner#endif
82