static ATermList applyImports(SDF_ImportList imports, PT_ParseTree pt) { ATermList result = ATempty; while (!SDF_isImportListEmpty(imports)) { SDF_Import import = SDF_getImportListHead(imports); if (SDF_hasImportRenamings(import)) { SDF_Renamings renamings = SDF_getImportRenamings(import); result = ATinsert(result, ATBpack( PT_ParseTreeToTerm(applyRenamings(renamings, pt)))); } else { result = ATinsert(result, ATBpack(PT_ParseTreeToTerm(pt))); } if (SDF_hasImportListTail(imports)) { imports = SDF_getImportListTail(imports); } else { break; } } return result; }
ATerm pretty_print(int cid, ATerm input) { PT_ParseTree parsetree = NULL; BOX_Start box = NULL; PT_Tree result = NULL; ERR_resetErrorManager(); parsetree = PT_ParseTreeFromTerm(ATBunpack(input)); if (parsetree != NULL) { box = pandora(parsetree); } if (box != NULL) { result = toText(PT_ParseTreeFromTerm(BOX_StartToTerm(box))); } if (result != NULL) { PT_ParseTree presult = PT_makeValidParseTreeFromTree(result); ATerm value = ATBpack(PT_ParseTreeToTerm(presult)); return ATmake("snd-value(pretty-printed(<term>))", value); } else { ERR_Summary summary = ERR_getManagerSummary(); return ATmake("snd-value(pretty-print-error(<term>))", summary); } }
ATerm rename_modulename_in_module(int cid, ATerm atModule, const char* name) { SDF_Start start = SDF_StartFromTerm(ATBunpack(atModule)); SDF_Module oldModule = SDF_getStartTopModule(start); SDF_Module newModule = SDF_setModuleName(oldModule, (char*) name); start = SDF_setStartTopModule(start, newModule); atModule = SDF_StartToTerm(start); return ATmake("snd-value(module(<term>))", ATBpack(atModule)); }
ATerm remove_import_from_module(int cid, ATerm atModule, const char* name) { SDF_Import sdfImport = SDF_makeImport((char*) name); SDF_Start start = SDF_StartFromTerm(ATBunpack(atModule)); SDF_Module oldModule = SDF_getStartTopModule(start); SDF_Module newModule = SDF_removeModuleImport(oldModule, sdfImport); start = SDF_setStartTopModule(start, newModule); atModule = SDF_StartToTerm(start); return ATmake("snd-value(module(<term>))", ATBpack(atModule)); }
ATerm make_sdf_definition(int cid, ATerm atModules) { ATermList list; SDF_ModuleList modules; SDF_OptLayout newline; SDF_SDF sdf; SDF_Start start; ATerm result; list = (ATermList) ATBunpack(atModules); modules = SDF_makeModuleListEmpty(); newline = SDF_makeLayoutNewline(); for( ;!ATisEmpty(list); list = ATgetNext(list)) { SDF_Start start = SDF_StartFromTerm(ATgetFirst(list)); SDF_Module module = SDF_getStartTopModule(start); if (SDF_isModuleListEmpty(modules)) { modules = SDF_makeModuleListSingle(module); } else { modules = SDF_makeModuleListMany(module, newline, modules); } } if (!SDF_isModuleListEmpty(modules)) { sdf = SDF_makeSDFDefinition(newline, SDF_makeDefinitionDefault(modules)); start = SDF_makeStartSDF(newline, sdf, newline, 0); result = ATBpack(SDF_StartToTerm(start)); return ATmake("snd-value(sdf-definition(<term>))", result); } else { return ATmake("snd-value(no-sdf-definition)"); } }
ATerm add_eqs_syntax(int cid, const char *name, ATerm term) { ATerm output = addEqsSyntax(name, ATBunpack(term)); return ATmake("snd-value(extended-syntax(<term>))", ATBpack(output)); }