//===--- QueryParser.h - ----------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H #define MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H #include "Matcher/Parser.h" #include "mlir/Query/Query.h" #include "mlir/Query/QuerySession.h" #include "llvm/ADT/StringRef.h" #include "llvm/LineEditor/LineEditor.h" namespace mlir::query { class QuerySession; class QueryParser { public: // Parse line as a query and return a QueryRef representing the query, which // may be an InvalidQuery. static QueryRef parse(llvm::StringRef line, const QuerySession &qs); static std::vector complete(llvm::StringRef line, size_t pos, const QuerySession &qs); private: QueryParser(llvm::StringRef line, const QuerySession &qs) : line(line), completionPos(nullptr), qs(qs) {} llvm::StringRef lexWord(); template struct LexOrCompleteWord; QueryRef completeMatcherExpression(); QueryRef endQuery(QueryRef queryRef); // Parse [begin, end) and returns a reference to the parsed query object, // which may be an InvalidQuery if a parse error occurs. QueryRef doParse(); llvm::StringRef line; const char *completionPos; std::vector completions; const QuerySession &qs; }; } // namespace mlir::query #endif // MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H