SDF_ProductionList SDF_concatProductionList(SDF_ProductionList l1, SDF_ProductionList l2) { if (!SDF_isProductionListEmpty(l2)) { if (SDF_hasProductionListHead(l1)) { SDF_Production head = SDF_getProductionListHead(l1); if (SDF_hasProductionListTail(l1)) { SDF_ProductionList tail = SDF_getProductionListTail(l1); return SDF_makeProductionListMany(head, SDF_makeLayoutEmpty(), SDF_concatProductionList(tail, l2)); } else { return SDF_makeProductionListMany(head, SDF_makeLayoutEmpty(), l2); } } else { return l2; } } return l1; }
static void collect_cf_prods(SDF_Grammar grammar, SDF_ProductionList *cfProds) { if (SDF_isGrammarContextFreeSyntax(grammar)) { SDF_Productions grammarProds = SDF_getGrammarProductions(grammar); SDF_ProductionList prods = SDF_getProductionsList(grammarProds); *cfProds = SDF_concatProductionList(*cfProds, SDF_makeLayoutSpace(), prods); } }
static void collect_lex_prods(SDF_Grammar grammar, SDF_ProductionList *lexProds) { if (SDF_isGrammarLexicalSyntax(grammar)) { SDF_Productions grammarProds = SDF_getGrammarProductions(grammar); SDF_ProductionList prods = SDF_getProductionsList(grammarProds); *lexProds = SDF_concatProductionList(*lexProds, SDF_makeLayoutSpace(), prods); } }
static void collect_var_prods(SDF_Grammar grammar, SDF_ProductionList *varProds) { if (SDF_isGrammarVariables(grammar)) { SDF_Productions grammarProds = SDF_getGrammarProductions(grammar); SDF_ProductionList prods = SDF_getProductionsList(grammarProds); *varProds = SDF_concatProductionList(*varProds, SDF_makeLayoutSpace(), prods); } }
static void collect_kernel_prods(SDF_Grammar grammar, SDF_ProductionList *prods) { if (SDF_isGrammarSyntax(grammar)) { SDF_Productions grammarProds = SDF_getGrammarProductions(grammar); SDF_ProductionList lexProds = SDF_getProductionsList(grammarProds); *prods = SDF_concatProductionList(*prods, SDF_makeLayoutSpace(), lexProds); } }
static void collect_all_prods(SDF_Grammar grammar, SDF_ProductionList *allProds) { if (SDF_hasGrammarProductions(grammar)) { SDF_Productions grammarProds = SDF_getGrammarProductions(grammar); SDF_ProductionList prods = SDF_getProductionsList(grammarProds); *allProds = SDF_concatProductionList(*allProds, SDF_makeLayoutSpace(), prods); } }
static SDF_ProductionList collectProductions(SDF_SDF syntax) { SDF_Definition def = SDF_getSDFDefinition(syntax); SDF_ModuleList modules = SDF_getDefinitionList(def); SDF_ProductionList productions = SDF_makeProductionListEmpty(); while (SDF_hasModuleListHead(modules) ) { SDF_Module module = SDF_getModuleListHead(modules); productions = SDF_concatProductionList(productions, SDF_getModuleContextFreeProductions(module)); if (!SDF_hasModuleListTail(modules)) { break; } else { modules = SDF_getModuleListTail(modules); } } return productions; }