Sha256: a3b99c11ed0992f37f435ea61d97e9cb1955e066fa39ec96dc4b8bb8707d8554

Contents?: true

Size: 885 Bytes

Versions: 1

Compression:

Stored size: 885 Bytes

Contents

#include "compiler/build_tables/rule_can_be_blank.h"
#include "compiler/rule.h"

namespace tree_sitter {
namespace build_tables {

bool rule_can_be_blank(const rules::Rule &rule) {
  return rule.match(
    [](rules::Blank) {
      return true;
    },

    [](rules::CharacterSet) {
      return false;
    },

    [](rules::Repeat repeat) {
      return rule_can_be_blank(*repeat.rule);
    },

    [](rules::Metadata metadata) {
      return rule_can_be_blank(*metadata.rule);
    },

    [](rules::Choice choice) {
      for (const auto &element : choice.elements) {
        if (rule_can_be_blank(element)) {
          return true;
        }
      }
      return false;
    },

    [](rules::Seq seq) {
      return rule_can_be_blank(*seq.left) && rule_can_be_blank(*seq.right);
    },

    [](auto) { return false; }
  );
}

}  // namespace build_tables
}  // namespace tree_sitter

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tree-sitter-0.1.0 ext/tree-sitter/tree-sitter/src/compiler/build_tables/rule_can_be_blank.cc