1*02d9f4d1SDevajith //===--- QueryParser.h - ----------------------------------------*- C++ -*-===// 2*02d9f4d1SDevajith // 3*02d9f4d1SDevajith // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*02d9f4d1SDevajith // See https://llvm.org/LICENSE.txt for license information. 5*02d9f4d1SDevajith // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*02d9f4d1SDevajith // 7*02d9f4d1SDevajith //===----------------------------------------------------------------------===// 8*02d9f4d1SDevajith 9*02d9f4d1SDevajith #ifndef MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H 10*02d9f4d1SDevajith #define MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H 11*02d9f4d1SDevajith 12*02d9f4d1SDevajith #include "Matcher/Parser.h" 13*02d9f4d1SDevajith #include "mlir/Query/Query.h" 14*02d9f4d1SDevajith #include "mlir/Query/QuerySession.h" 15*02d9f4d1SDevajith 16*02d9f4d1SDevajith #include "llvm/ADT/StringRef.h" 17*02d9f4d1SDevajith #include "llvm/LineEditor/LineEditor.h" 18*02d9f4d1SDevajith 19*02d9f4d1SDevajith namespace mlir::query { 20*02d9f4d1SDevajith 21*02d9f4d1SDevajith class QuerySession; 22*02d9f4d1SDevajith 23*02d9f4d1SDevajith class QueryParser { 24*02d9f4d1SDevajith public: 25*02d9f4d1SDevajith // Parse line as a query and return a QueryRef representing the query, which 26*02d9f4d1SDevajith // may be an InvalidQuery. 27*02d9f4d1SDevajith static QueryRef parse(llvm::StringRef line, const QuerySession &qs); 28*02d9f4d1SDevajith 29*02d9f4d1SDevajith static std::vector<llvm::LineEditor::Completion> 30*02d9f4d1SDevajith complete(llvm::StringRef line, size_t pos, const QuerySession &qs); 31*02d9f4d1SDevajith 32*02d9f4d1SDevajith private: QueryParser(llvm::StringRef line,const QuerySession & qs)33*02d9f4d1SDevajith QueryParser(llvm::StringRef line, const QuerySession &qs) 34*02d9f4d1SDevajith : line(line), completionPos(nullptr), qs(qs) {} 35*02d9f4d1SDevajith 36*02d9f4d1SDevajith llvm::StringRef lexWord(); 37*02d9f4d1SDevajith 38*02d9f4d1SDevajith template <typename T> 39*02d9f4d1SDevajith struct LexOrCompleteWord; 40*02d9f4d1SDevajith 41*02d9f4d1SDevajith QueryRef completeMatcherExpression(); 42*02d9f4d1SDevajith 43*02d9f4d1SDevajith QueryRef endQuery(QueryRef queryRef); 44*02d9f4d1SDevajith 45*02d9f4d1SDevajith // Parse [begin, end) and returns a reference to the parsed query object, 46*02d9f4d1SDevajith // which may be an InvalidQuery if a parse error occurs. 47*02d9f4d1SDevajith QueryRef doParse(); 48*02d9f4d1SDevajith 49*02d9f4d1SDevajith llvm::StringRef line; 50*02d9f4d1SDevajith 51*02d9f4d1SDevajith const char *completionPos; 52*02d9f4d1SDevajith std::vector<llvm::LineEditor::Completion> completions; 53*02d9f4d1SDevajith 54*02d9f4d1SDevajith const QuerySession &qs; 55*02d9f4d1SDevajith }; 56*02d9f4d1SDevajith 57*02d9f4d1SDevajith } // namespace mlir::query 58*02d9f4d1SDevajith 59*02d9f4d1SDevajith #endif // MLIR_TOOLS_MLIRQUERY_QUERYPARSER_H 60