| //===--- 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<llvm::LineEditor::Completion> |
| 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 <typename T> |
| 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<llvm::LineEditor::Completion> completions; |
| |
| const QuerySession &qs; |
| }; |
| |
| } // namespace mlir::query |
| |
| #endif // MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H |