| //===- AsmLexer.h - Lexer for Assembly Files --------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This class declares the lexer for assembly files. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef ASMLEXER_H |
| #define ASMLEXER_H |
| |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/MC/MCParser/MCAsmLexer.h" |
| #include "llvm/MC/MCAsmInfo.h" |
| #include "llvm/Support/DataTypes.h" |
| #include <string> |
| #include <cassert> |
| |
| namespace llvm { |
| class MemoryBuffer; |
| class SMLoc; |
| class MCAsmInfo; |
| |
| /// AsmLexer - Lexer class for assembly files. |
| class AsmLexer : public MCAsmLexer { |
| const MCAsmInfo &MAI; |
| |
| const char *CurPtr; |
| const MemoryBuffer *CurBuf; |
| bool isAtStartOfLine; |
| |
| void operator=(const AsmLexer&); // DO NOT IMPLEMENT |
| AsmLexer(const AsmLexer&); // DO NOT IMPLEMENT |
| |
| protected: |
| /// LexToken - Read the next token and return its code. |
| virtual AsmToken LexToken(); |
| |
| public: |
| AsmLexer(const MCAsmInfo &MAI); |
| ~AsmLexer(); |
| |
| void setBuffer(const MemoryBuffer *buf, const char *ptr = NULL); |
| |
| virtual StringRef LexUntilEndOfStatement(); |
| StringRef LexUntilEndOfLine(); |
| |
| bool isAtStartOfComment(char Char); |
| bool isAtStatementSeparator(const char *Ptr); |
| |
| const MCAsmInfo &getMAI() const { return MAI; } |
| |
| private: |
| int getNextChar(); |
| AsmToken ReturnError(const char *Loc, const std::string &Msg); |
| |
| AsmToken LexIdentifier(); |
| AsmToken LexSlash(); |
| AsmToken LexLineComment(); |
| AsmToken LexDigit(); |
| AsmToken LexSingleQuote(); |
| AsmToken LexQuote(); |
| AsmToken LexFloatLiteral(); |
| }; |
| |
| } // end namespace llvm |
| |
| #endif |