1 | //===- AsmParser.h - MLIR AsmParser Library 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-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file is contains the interface to the MLIR assembly parser library. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #ifndef MLIR_ASMPARSER_ASMPARSER_H |
14 | #define MLIR_ASMPARSER_ASMPARSER_H |
15 | |
16 | #include "mlir/IR/AsmState.h" |
17 | #include <cstddef> |
18 | |
19 | namespace llvm { |
20 | class SourceMgr; |
21 | class StringRef; |
22 | } // namespace llvm |
23 | |
24 | namespace mlir { |
25 | class AsmParserState; |
26 | class AsmParserCodeCompleteContext; |
27 | |
28 | /// This parses the file specified by the indicated SourceMgr and appends parsed |
29 | /// operations to the given block. If the block is non-empty, the operations are |
30 | /// placed before the current terminator. If parsing is successful, success is |
31 | /// returned. Otherwise, an error message is emitted through the error handler |
32 | /// registered in the context, and failure is returned. If `sourceFileLoc` is |
33 | /// non-null, it is populated with a file location representing the start of the |
34 | /// source file that is being parsed. If `asmState` is non-null, it is populated |
35 | /// with detailed information about the parsed IR (including exact locations for |
36 | /// SSA uses and definitions). `asmState` should only be provided if this |
37 | /// detailed information is desired. If `codeCompleteContext` is non-null, it is |
38 | /// used to signal tracking of a code completion event (generally only ever |
39 | /// useful for LSP or other high level language tooling). |
40 | LogicalResult |
41 | parseAsmSourceFile(const llvm::SourceMgr &sourceMgr, Block *block, |
42 | const ParserConfig &config, |
43 | AsmParserState *asmState = nullptr, |
44 | AsmParserCodeCompleteContext *codeCompleteContext = nullptr); |
45 | |
46 | /// This parses a single MLIR attribute to an MLIR context if it was valid. If |
47 | /// not, an error diagnostic is emitted to the context and a null value is |
48 | /// returned. |
49 | /// If `numRead` is provided, it is set to the number of consumed characters on |
50 | /// succesful parse. Otherwise, parsing fails if the entire string is not |
51 | /// consumed. |
52 | /// Some internal copying can be skipped if the source string is known to be |
53 | /// null terminated. |
54 | Attribute parseAttribute(llvm::StringRef attrStr, MLIRContext *context, |
55 | Type type = {}, size_t *numRead = nullptr, |
56 | bool isKnownNullTerminated = false); |
57 | |
58 | /// This parses a single MLIR type to an MLIR context if it was valid. If not, |
59 | /// an error diagnostic is emitted to the context. |
60 | /// If `numRead` is provided, it is set to the number of consumed characters on |
61 | /// succesful parse. Otherwise, parsing fails if the entire string is not |
62 | /// consumed. |
63 | /// Some internal copying can be skipped if the source string is known to be |
64 | /// null terminated. |
65 | Type parseType(llvm::StringRef typeStr, MLIRContext *context, |
66 | size_t *numRead = nullptr, bool isKnownNullTerminated = false); |
67 | |
68 | /// This parses a single IntegerSet/AffineMap to an MLIR context if it was |
69 | /// valid. If not, an error message is emitted through a new |
70 | /// SourceMgrDiagnosticHandler constructed from a new SourceMgr with a single |
71 | /// MemoryBuffer wrapping `str`. If the passed `str` has additional tokens that |
72 | /// were not part of the IntegerSet/AffineMap, a failure is returned. |
73 | AffineMap parseAffineMap(llvm::StringRef str, MLIRContext *context); |
74 | IntegerSet parseIntegerSet(llvm::StringRef str, MLIRContext *context); |
75 | |
76 | } // namespace mlir |
77 | |
78 | #endif // MLIR_ASMPARSER_ASMPARSER_H |
79 | |