Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 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 | |
Daniel Dunbar | 9a7e2cc | 2009-07-27 21:49:56 +0000 | [diff] [blame] | 17 | #include "llvm/ADT/StringRef.h" |
Daniel Dunbar | dbd692a | 2009-07-20 20:01:54 +0000 | [diff] [blame] | 18 | #include "llvm/MC/MCAsmLexer.h" |
Kevin Enderby | 9823ca9 | 2009-09-04 21:45:34 +0000 | [diff] [blame] | 19 | #include "llvm/MC/MCAsmInfo.h" |
Chandler Carruth | 8b67f77 | 2009-10-26 01:35:46 +0000 | [diff] [blame] | 20 | #include "llvm/System/DataTypes.h" |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 21 | #include <string> |
| 22 | #include <cassert> |
| 23 | |
| 24 | namespace llvm { |
| 25 | class MemoryBuffer; |
| 26 | class SourceMgr; |
| 27 | class SMLoc; |
Kevin Enderby | 9823ca9 | 2009-09-04 21:45:34 +0000 | [diff] [blame] | 28 | class MCAsmInfo; |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 29 | |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 30 | /// AsmLexer - Lexer class for assembly files. |
Daniel Dunbar | dbd692a | 2009-07-20 20:01:54 +0000 | [diff] [blame] | 31 | class AsmLexer : public MCAsmLexer { |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 32 | SourceMgr &SrcMgr; |
Chris Lattner | cec5450 | 2009-09-27 19:38:39 +0000 | [diff] [blame] | 33 | const MCAsmInfo &MAI; |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 34 | |
| 35 | const char *CurPtr; |
| 36 | const MemoryBuffer *CurBuf; |
| 37 | |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 38 | const char *TokStart; |
Daniel Dunbar | cb358b6 | 2009-07-28 03:00:54 +0000 | [diff] [blame] | 39 | |
Daniel Dunbar | cb358b6 | 2009-07-28 03:00:54 +0000 | [diff] [blame] | 40 | /// This is the current buffer index we're lexing from as managed by the |
| 41 | /// SourceMgr object. |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 42 | int CurBuffer; |
| 43 | |
Chris Lattner | faf32c1 | 2009-06-24 00:33:19 +0000 | [diff] [blame] | 44 | void operator=(const AsmLexer&); // DO NOT IMPLEMENT |
| 45 | AsmLexer(const AsmLexer&); // DO NOT IMPLEMENT |
Daniel Dunbar | cbbe248 | 2009-07-28 17:58:44 +0000 | [diff] [blame] | 46 | |
| 47 | protected: |
| 48 | /// LexToken - Read the next token and return its code. |
| 49 | virtual AsmToken LexToken(); |
| 50 | |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 51 | public: |
Kevin Enderby | 9823ca9 | 2009-09-04 21:45:34 +0000 | [diff] [blame] | 52 | AsmLexer(SourceMgr &SrcMgr, const MCAsmInfo &MAI); |
Chris Lattner | faf32c1 | 2009-06-24 00:33:19 +0000 | [diff] [blame] | 53 | ~AsmLexer(); |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 54 | |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 55 | SMLoc getLoc() const; |
Chris Lattner | ff4bc46 | 2009-08-10 01:39:42 +0000 | [diff] [blame] | 56 | |
| 57 | StringRef LexUntilEndOfStatement(); |
Kevin Enderby | b5db830 | 2009-09-16 18:08:00 +0000 | [diff] [blame] | 58 | |
| 59 | bool isAtStartOfComment(char Char); |
Daniel Dunbar | cbbe248 | 2009-07-28 17:58:44 +0000 | [diff] [blame] | 60 | |
Chris Lattner | 8e25e2d | 2009-07-16 06:14:39 +0000 | [diff] [blame] | 61 | /// EnterIncludeFile - Enter the specified file. This returns true on failure. |
| 62 | bool EnterIncludeFile(const std::string &Filename); |
| 63 | |
Chris Lattner | 258281d | 2010-01-19 06:22:22 +0000 | [diff] [blame] | 64 | const MCAsmInfo &getMAI() const { return MAI; } |
| 65 | |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 66 | private: |
| 67 | int getNextChar(); |
Daniel Dunbar | cb358b6 | 2009-07-28 03:00:54 +0000 | [diff] [blame] | 68 | AsmToken ReturnError(const char *Loc, const std::string &Msg); |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 69 | |
Daniel Dunbar | cb358b6 | 2009-07-28 03:00:54 +0000 | [diff] [blame] | 70 | AsmToken LexIdentifier(); |
Daniel Dunbar | cb358b6 | 2009-07-28 03:00:54 +0000 | [diff] [blame] | 71 | AsmToken LexSlash(); |
| 72 | AsmToken LexLineComment(); |
| 73 | AsmToken LexDigit(); |
| 74 | AsmToken LexQuote(); |
Chris Lattner | a59e877 | 2009-06-21 07:19:10 +0000 | [diff] [blame] | 75 | }; |
| 76 | |
| 77 | } // end namespace llvm |
| 78 | |
| 79 | #endif |