30 #ifndef MLIR_TOOLS_MLIRQUERY_MATCHER_PARSER_H
31 #define MLIR_TOOLS_MLIRQUERY_MATCHER_PARSER_H
35 #include "llvm/ADT/ArrayRef.h"
36 #include "llvm/ADT/StringMap.h"
37 #include "llvm/ADT/StringRef.h"
75 virtual std::optional<MatcherCtor>
83 virtual std::vector<MatcherCompletion>
92 : matcherRegistry(matcherRegistry) {}
95 std::optional<MatcherCtor>
100 StringRef functionName,
105 llvm::ArrayRef<std::pair<MatcherCtor, unsigned>> context)
override;
107 std::vector<MatcherCompletion>
118 static std::optional<DynMatcher>
122 static std::optional<DynMatcher>
141 static std::vector<MatcherCompletion>
145 static std::vector<MatcherCompletion>
153 struct ScopedContextEntry;
159 bool parseChainedExpression(std::string &argument);
163 bool parseMatcherArgs(std::vector<ParserValue> &args,
MatcherCtor ctor,
164 const TokenInfo &nameToken, TokenInfo &endToken);
166 bool parseMatcherExpressionImpl(
const TokenInfo &nameToken,
167 const TokenInfo &openToken,
168 std::optional<MatcherCtor> ctor,
173 void addCompletion(
const TokenInfo &compToken,
175 void addExpressionCompletions();
177 std::vector<MatcherCompletion>
180 CodeTokenizer *
const tokenizer;
181 std::unique_ptr<RegistrySema> sema;
185 using ContextStackTy = std::vector<std::pair<MatcherCtor, unsigned>>;
187 ContextStackTy contextStack;
188 std::vector<MatcherCompletion> completions;
RegistrySema(const Registry &matcherRegistry)
std::optional< MatcherCtor > lookupMatcherCtor(llvm::StringRef matcherName) override
std::vector< MatcherCompletion > getMatcherCompletions(llvm::ArrayRef< ArgKind > acceptedTypes) override
std::vector< ArgKind > getAcceptedCompletionTypes(llvm::ArrayRef< std::pair< MatcherCtor, unsigned >> context) override
VariantMatcher actOnMatcherExpression(MatcherCtor Ctor, SourceRange NameRange, StringRef functionName, ArrayRef< ParserValue > Args, Diagnostics *Error) override
virtual std::vector< MatcherCompletion > getMatcherCompletions(llvm::ArrayRef< ArgKind > acceptedTypes)
virtual std::optional< MatcherCtor > lookupMatcherCtor(llvm::StringRef matcherName)=0
virtual std::vector< ArgKind > getAcceptedCompletionTypes(llvm::ArrayRef< std::pair< MatcherCtor, unsigned >> Context)
virtual VariantMatcher actOnMatcherExpression(MatcherCtor ctor, SourceRange nameRange, llvm::StringRef functionName, llvm::ArrayRef< ParserValue > args, Diagnostics *error)=0
static bool parseExpression(llvm::StringRef &code, const Registry &matcherRegistry, const NamedValueMap *namedValues, VariantValue *value, Diagnostics *error)
static std::vector< MatcherCompletion > completeExpression(llvm::StringRef &code, unsigned completionOffset, const Registry &matcherRegistry)
llvm::StringMap< VariantValue > NamedValueMap
static bool parseExpression(llvm::StringRef &code, const Registry &matcherRegistry, VariantValue *value, Diagnostics *error)
static std::optional< DynMatcher > parseMatcherExpression(llvm::StringRef &matcherCode, const Registry &matcherRegistry, Diagnostics *error)
static std::vector< MatcherCompletion > completeExpression(llvm::StringRef &code, unsigned completionOffset, const Registry &matcherRegistry, const NamedValueMap *namedValues)
static std::optional< DynMatcher > parseMatcherExpression(llvm::StringRef &matcherCode, const Registry &matcherRegistry, const NamedValueMap *namedValues, Diagnostics *error)