Sha256: 1d2049f35aefe5bfd5368314e776f92ca709120914bb432219c8f715e2bb9735

Contents?: true

Size: 1.82 KB

Versions: 47

Compression:

Stored size: 1.82 KB

Contents

/* 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.
 */

#include "Exceptions.h"

#include "tree/pattern/ParseTreeMatch.h"

using namespace antlr4::tree;
using namespace antlr4::tree::pattern;

ParseTreeMatch::ParseTreeMatch(ParseTree *tree, const ParseTreePattern &pattern,
                               const std::map<std::string, std::vector<ParseTree *>> &labels,
                               ParseTree *mismatchedNode)
  : _tree(tree), _pattern(pattern), _labels(labels), _mismatchedNode(mismatchedNode) {
  if (tree == nullptr) {
    throw IllegalArgumentException("tree cannot be nul");
  }
}

ParseTreeMatch::~ParseTreeMatch() {
}

ParseTree* ParseTreeMatch::get(const std::string &label) {
  auto iterator = _labels.find(label);
  if (iterator == _labels.end() || iterator->second.empty()) {
    return nullptr;
  }

  return iterator->second.back(); // return last if multiple
}

std::vector<ParseTree *> ParseTreeMatch::getAll(const std::string &label) {
  auto iterator = _labels.find(label);
  if (iterator == _labels.end()) {
    return {};
  }

  return iterator->second;
}

std::map<std::string, std::vector<ParseTree *>>& ParseTreeMatch::getLabels() {
  return _labels;
}

ParseTree *ParseTreeMatch::getMismatchedNode() {
  return _mismatchedNode;
}

bool ParseTreeMatch::succeeded() {
  return _mismatchedNode == nullptr;
}

const ParseTreePattern& ParseTreeMatch::getPattern() {
  return _pattern;
}

ParseTree * ParseTreeMatch::getTree() {
  return _tree;
}

std::string ParseTreeMatch::toString() {
  if (succeeded()) {
    return "Match succeeded; found " + std::to_string(_labels.size()) + " labels";
  } else {
    return "Match failed; found " + std::to_string(_labels.size()) + " labels";
  }
}

Version data entries

47 entries across 47 versions & 4 rubygems

Version Path
expressir-0.2.9 ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
expressir-0.2.8 ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
expressir-0.2.7 ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
expressir-0.2.5-x86_64-linux ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
expressir-0.2.5-x86_64-darwin-19 ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
expressir-0.2.5 ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp
python3-parser-1.0.0 ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp