1 //===- Lexer.h - MLIR Lexer Interface ---------------------------*- C++ -*-===//
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-exception
7 //===----------------------------------------------------------------------===//
9 // This file declares the MLIR Lexer class.
11 //===----------------------------------------------------------------------===//
13 #ifndef MLIR_LIB_ASMPARSER_LEXER_H
14 #define MLIR_LIB_ASMPARSER_LEXER_H
17 #include "mlir/AsmParser/AsmParser.h"
22 /// This class breaks up the current file into a token stream.
25 explicit Lexer(const llvm::SourceMgr
&sourceMgr
, MLIRContext
*context
,
26 AsmParserCodeCompleteContext
*codeCompleteContext
);
28 const llvm::SourceMgr
&getSourceMgr() { return sourceMgr
; }
32 /// Encode the specified source location information into a Location object
33 /// for attachment to the IR or error reporting.
34 Location
getEncodedSourceLocation(SMLoc loc
);
36 /// Change the position of the lexer cursor. The next token we lex will start
37 /// at the designated point in the input.
38 void resetPointer(const char *newPointer
) { curPtr
= newPointer
; }
40 /// Returns the start of the buffer.
41 const char *getBufferBegin() { return curBuffer
.data(); }
43 /// Return the code completion location of the lexer, or nullptr if there is
45 const char *getCodeCompleteLoc() const { return codeCompleteLoc
; }
49 Token
formToken(Token::Kind kind
, const char *tokStart
) {
50 return Token(kind
, StringRef(tokStart
, curPtr
- tokStart
));
53 Token
emitError(const char *loc
, const Twine
&message
);
55 // Lexer implementation methods.
56 Token
lexAtIdentifier(const char *tokStart
);
57 Token
lexBareIdentifierOrKeyword(const char *tokStart
);
58 Token
lexEllipsis(const char *tokStart
);
59 Token
lexNumber(const char *tokStart
);
60 Token
lexPrefixedIdentifier(const char *tokStart
);
61 Token
lexString(const char *tokStart
);
63 /// Skip a comment line, starting with a '//'.
66 const llvm::SourceMgr
&sourceMgr
;
72 /// An optional code completion point within the input file, used to indicate
73 /// the position of a code completion token.
74 const char *codeCompleteLoc
;
76 Lexer(const Lexer
&) = delete;
77 void operator=(const Lexer
&) = delete;
82 #endif // MLIR_LIB_ASMPARSER_LEXER_H