/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "utils/grammar/parsing/derivation.h" #include #include namespace libtextclassifier3::grammar { bool Derivation::IsValid() const { bool result = true; Traverse(parse_tree, [&result](const ParseTree* node) { if (node->type != ParseTree::Type::kAssertion) { // Only validation if all checks so far passed. return result; } // Positive assertions are by definition fulfilled, // fail if the assertion is negative. if (static_cast(node)->negative) { result = false; } return result; }); return result; } std::vector ValidDeduplicatedDerivations( const std::vector& derivations) { std::vector result; for (const Derivation& derivation : DeduplicateDerivations(derivations)) { // Check that asserts are fulfilled. if (derivation.IsValid()) { result.push_back(derivation); } } return result; } } // namespace libtextclassifier3::grammar