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
19namespace llvm {
20class SourceMgr;
21class StringRef;
22} // namespace llvm
23
24namespace mlir {
25class AsmParserState;
26class 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).
40LogicalResult
41parseAsmSourceFile(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.
54Attribute 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.
65Type 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.
73AffineMap parseAffineMap(llvm::StringRef str, MLIRContext *context);
74IntegerSet parseIntegerSet(llvm::StringRef str, MLIRContext *context);
75
76} // namespace mlir
77
78#endif // MLIR_ASMPARSER_ASMPARSER_H
79

source code of mlir/include/mlir/AsmParser/AsmParser.h