From: Clint Herron Date: Sun, 10 Mar 2024 15:17:43 +0000 (-0400) Subject: grammar : verify parsed state (#5950) X-Git-Tag: upstream/0.0.4488~2103 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=2960eae847f8dbde23be6d170a61bcf44ebf32de;p=pkg%2Fggml%2Fsources%2Fllama.cpp grammar : verify parsed state (#5950) --- diff --git a/common/grammar-parser.cpp b/common/grammar-parser.cpp index bf89a96f..2a130156 100644 --- a/common/grammar-parser.cpp +++ b/common/grammar-parser.cpp @@ -278,6 +278,22 @@ namespace grammar_parser { while (*pos) { pos = parse_rule(state, pos); } + // Validate the state to ensure that all rules are defined + for (const auto & rule : state.rules) { + for (const auto & elem : rule) { + if (elem.type == LLAMA_GRETYPE_RULE_REF) { + // Ensure that the rule at that location exists + if (elem.value >= state.rules.size() || state.rules[elem.value].empty()) { + // Get the name of the rule that is missing + for (const auto & kv : state.symbol_ids) { + if (kv.second == elem.value) { + throw std::runtime_error("Undefined rule identifier '" + kv.first + "'"); + } + } + } + } + } + } return state; } catch (const std::exception & err) { fprintf(stderr, "%s: error parsing grammar: %s\n", __func__, err.what());