| 305 | } |
| 306 | |
| 307 | static void print_rule_binary(FILE * file, const std::vector<llama_grammar_element> & rule) { |
| 308 | for (auto elem : rule) { |
| 309 | switch (elem.type) { |
| 310 | case LLAMA_GRETYPE_END: fprintf(file, "END"); break; |
| 311 | case LLAMA_GRETYPE_ALT: fprintf(file, "ALT"); break; |
| 312 | case LLAMA_GRETYPE_RULE_REF: fprintf(file, "RULE_REF"); break; |
| 313 | case LLAMA_GRETYPE_CHAR: fprintf(file, "CHAR"); break; |
| 314 | case LLAMA_GRETYPE_CHAR_NOT: fprintf(file, "CHAR_NOT"); break; |
| 315 | case LLAMA_GRETYPE_CHAR_RNG_UPPER: fprintf(file, "CHAR_RNG_UPPER"); break; |
| 316 | case LLAMA_GRETYPE_CHAR_ALT: fprintf(file, "CHAR_ALT"); break; |
| 317 | } |
| 318 | switch (elem.type) { |
| 319 | case LLAMA_GRETYPE_END: |
| 320 | case LLAMA_GRETYPE_ALT: |
| 321 | case LLAMA_GRETYPE_RULE_REF: |
| 322 | fprintf(file, "(%u) ", elem.value); |
| 323 | break; |
| 324 | case LLAMA_GRETYPE_CHAR: |
| 325 | case LLAMA_GRETYPE_CHAR_NOT: |
| 326 | case LLAMA_GRETYPE_CHAR_RNG_UPPER: |
| 327 | case LLAMA_GRETYPE_CHAR_ALT: |
| 328 | fprintf(file, "(\""); |
| 329 | print_grammar_char(file, elem.value); |
| 330 | fprintf(file, "\") "); |
| 331 | break; |
| 332 | } |
| 333 | } |
| 334 | fprintf(file, "\n"); |
| 335 | } |
| 336 | |
| 337 | static void print_rule( |
| 338 | FILE * file, |
nothing calls this directly
no test coverage detected