86 lines · c
1//===- Lexer.h - MLIR Lexer Interface ---------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares the MLIR Lexer class.10//11//===----------------------------------------------------------------------===//12 13#ifndef MLIR_LIB_ASMPARSER_LEXER_H14#define MLIR_LIB_ASMPARSER_LEXER_H15 16#include "Token.h"17#include "mlir/AsmParser/AsmParser.h"18 19namespace mlir {20class Location;21 22/// This class breaks up the current file into a token stream.23class Lexer {24public:25 explicit Lexer(const llvm::SourceMgr &sourceMgr, MLIRContext *context,26 AsmParserCodeCompleteContext *codeCompleteContext);27 28 const llvm::SourceMgr &getSourceMgr() { return sourceMgr; }29 30 Token lexToken();31 32 /// Encode the specified source location information into a Location object33 /// for attachment to the IR or error reporting.34 Location getEncodedSourceLocation(SMLoc loc);35 36 /// Change the position of the lexer cursor. The next token we lex will start37 /// at the designated point in the input.38 void resetPointer(const char *newPointer) { curPtr = newPointer; }39 40 /// Returns the start of the buffer.41 const char *getBufferBegin() { return curBuffer.data(); }42 43 /// Returns the end of the buffer.44 const char *getBufferEnd() { return curBuffer.end(); }45 46 /// Return the code completion location of the lexer, or nullptr if there is47 /// none.48 const char *getCodeCompleteLoc() const { return codeCompleteLoc; }49 50private:51 // Helpers.52 Token formToken(Token::Kind kind, const char *tokStart) {53 return Token(kind, StringRef(tokStart, curPtr - tokStart));54 }55 56 Token emitError(const char *loc, const Twine &message);57 58 // Lexer implementation methods.59 Token lexAtIdentifier(const char *tokStart);60 Token lexBareIdentifierOrKeyword(const char *tokStart);61 Token lexEllipsis(const char *tokStart);62 Token lexNumber(const char *tokStart);63 Token lexPrefixedIdentifier(const char *tokStart);64 Token lexString(const char *tokStart);65 66 /// Skip a comment line, starting with a '//'.67 void skipComment();68 69 const llvm::SourceMgr &sourceMgr;70 MLIRContext *context;71 72 StringRef curBuffer;73 const char *curPtr;74 75 /// An optional code completion point within the input file, used to indicate76 /// the position of a code completion token.77 const char *codeCompleteLoc;78 79 Lexer(const Lexer &) = delete;80 void operator=(const Lexer &) = delete;81};82 83} // namespace mlir84 85#endif // MLIR_LIB_ASMPARSER_LEXER_H86