xref: /llvm-project/mlir/lib/Query/QueryParser.h (revision 02d9f4d1f128e17e04ab6e602d3c9b9942612428)
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