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