brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 159058a Raw
100 lines · c
1//===- ParserState.h - MLIR ParserState -------------------------*- 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#ifndef MLIR_LIB_ASMPARSER_PARSERSTATE_H10#define MLIR_LIB_ASMPARSER_PARSERSTATE_H11 12#include "Lexer.h"13#include "mlir/IR/Attributes.h"14#include "mlir/IR/OpImplementation.h"15#include "llvm/ADT/SetVector.h"16#include "llvm/ADT/StringMap.h"17 18namespace mlir {19class OpAsmDialectInterface;20 21namespace detail {22 23//===----------------------------------------------------------------------===//24// SymbolState25//===----------------------------------------------------------------------===//26 27/// This class contains record of any parsed top-level symbols.28struct SymbolState {29  /// A map from attribute alias identifier to Attribute.30  llvm::StringMap<Attribute> attributeAliasDefinitions;31 32  /// A map from type alias identifier to Type.33  llvm::StringMap<Type> typeAliasDefinitions;34 35  /// A map of dialect resource keys to the resolved resource name and handle36  /// to use during parsing.37  DenseMap<const OpAsmDialectInterface *,38           llvm::StringMap<std::pair<std::string, AsmDialectResourceHandle>>>39      dialectResources;40 41  /// A map from unique integer identifier to DistinctAttr.42  DenseMap<uint64_t, DistinctAttr> distinctAttributes;43};44 45//===----------------------------------------------------------------------===//46// ParserState47//===----------------------------------------------------------------------===//48 49/// This class refers to all of the state maintained globally by the parser,50/// such as the current lexer position etc.51struct ParserState {52  ParserState(const llvm::SourceMgr &sourceMgr, const ParserConfig &config,53              SymbolState &symbols, AsmParserState *asmState,54              AsmParserCodeCompleteContext *codeCompleteContext)55      : config(config),56        lex(sourceMgr, config.getContext(), codeCompleteContext),57        curToken(lex.lexToken()), lastToken(Token::error, ""), symbols(symbols),58        asmState(asmState), codeCompleteContext(codeCompleteContext) {}59  ParserState(const ParserState &) = delete;60  void operator=(const ParserState &) = delete;61 62  /// The configuration used to setup the parser.63  const ParserConfig &config;64 65  /// The lexer for the source file we're parsing.66  Lexer lex;67 68  /// This is the next token that hasn't been consumed yet.69  Token curToken;70 71  /// This is the last token that has been consumed.72  Token lastToken;73 74  /// The current state for symbol parsing.75  SymbolState &symbols;76 77  /// Stack of potentially cyclic mutable attributes or type currently being78  /// parsed.79  SetVector<const void *> cyclicParsingStack;80 81  /// An optional pointer to a struct containing high level parser state to be82  /// populated during parsing.83  AsmParserState *asmState;84 85  /// An optional code completion context.86  AsmParserCodeCompleteContext *codeCompleteContext;87 88  // Contains the stack of default dialect to use when parsing regions.89  // A new dialect get pushed to the stack before parsing regions nested90  // under an operation implementing `OpAsmOpInterface`, and91  // popped when done. At the top-level we start with "builtin" as the92  // default, so that the top-level `module` operation parses as-is.93  SmallVector<StringRef> defaultDialectStack{"builtin"};94};95 96} // namespace detail97} // namespace mlir98 99#endif // MLIR_LIB_ASMPARSER_PARSERSTATE_H100