/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. * Use of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ #pragma once #include "antlr4-common.h" namespace antlr4 { namespace tree { namespace pattern { /// /// A pattern like {@code = ;} converted to a by /// . /// class ANTLR4CPP_PUBLIC ParseTreePattern { public: /// /// Construct a new instance of the class. /// /// The which created this /// tree pattern. /// The tree pattern in concrete syntax form. /// The parser rule which serves as the root of the /// tree pattern. /// The tree pattern in form. ParseTreePattern(ParseTreePatternMatcher *matcher, const std::string &pattern, int patternRuleIndex, ParseTree *patternTree); ParseTreePattern(ParseTreePattern const&) = default; virtual ~ParseTreePattern(); /// /// Match a specific parse tree against this tree pattern. /// /// The parse tree to match against this tree pattern. /// A object describing the result of the /// match operation. The method can be /// used to determine whether or not the match was successful. virtual ParseTreeMatch match(ParseTree *tree); /// /// Determine whether or not a parse tree matches this tree pattern. /// /// The parse tree to match against this tree pattern. /// {@code true} if {@code tree} is a match for the current tree /// pattern; otherwise, {@code false}. virtual bool matches(ParseTree *tree); /// Find all nodes using XPath and then try to match those subtrees against /// this tree pattern. /// @param tree The ParseTree to match against this pattern. /// @param xpath An expression matching the nodes /// /// @returns A collection of ParseTreeMatch objects describing the /// successful matches. Unsuccessful matches are omitted from the result, /// regardless of the reason for the failure. virtual std::vector findAll(ParseTree *tree, const std::string &xpath); /// /// Get the which created this tree pattern. /// /// The which created this tree /// pattern. virtual ParseTreePatternMatcher *getMatcher() const; /// /// Get the tree pattern in concrete syntax form. /// /// The tree pattern in concrete syntax form. virtual std::string getPattern() const; /// /// Get the parser rule which serves as the outermost rule for the tree /// pattern. /// /// The parser rule which serves as the outermost rule for the tree /// pattern. virtual int getPatternRuleIndex() const; /// /// Get the tree pattern as a . The rule and token tags from /// the pattern are present in the parse tree as terminal nodes with a symbol /// of type or . /// /// The tree pattern as a . virtual ParseTree* getPatternTree() const; private: const int patternRuleIndex; /// This is the backing field for . const std::string _pattern; /// This is the backing field for . ParseTree *_patternTree; /// This is the backing field for . ParseTreePatternMatcher *const _matcher; }; } // namespace pattern } // namespace tree } // namespace antlr4