void SDFforeachGrammar(SDF_Grammar grammar, SDFGrammarFunc func, void *user_data) { if (SDF_isGrammarConcGrammars(grammar)) { SDFforeachGrammar(SDF_getGrammarLeft(grammar), func, user_data); SDFforeachGrammar(SDF_getGrammarRight(grammar), func, user_data); } else { func(grammar, user_data); } }
SDF_ProductionList SDF_getGrammarKernelProductions(SDF_Grammar grammar) { SDF_ProductionList prods = SDF_makeProductionListEmpty(); SDFforeachGrammar(grammar, (SDFGrammarFunc)collect_kernel_prods, (void *)&prods); return prods; }
void SDFforeachGrammarInSections(SDF_Sections sections, SDFGrammarFunc func, void *user_data) { SDF_SectionList sectionList = SDF_getSectionsList(sections); while (!SDF_isSectionListEmpty(sectionList)) { SDF_Section section = SDF_getSectionListHead(sectionList); SDF_Grammar grammar = SDF_getSectionGrammar(section); SDFforeachGrammar(grammar, func, user_data); if (SDF_isSectionListSingle(sectionList)) { break; } sectionList = SDF_getSectionListTail(sectionList); } }