brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 670444e Raw
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