virt_sizo(Sizo):- bind_scope(_, assign_sizo(Sizo), strong). virt_resource(files). virt_sizo_control(Sizo, Resource):- bind_scope(Scope, assign_sizo_control(Resource), strong); bind_scope(Scope, assign_sizo(Sizo), strong). % Decisions %----------------------------------- virt_sizo_strategy(Sizo, Resource, direct):- not virt_sizo_control(Sizo, Resource); virt_resource(Resource); virt_sizo(Sizo). activate_strategy_prefix(prefix) :- 2 #count{Sizo: virt_sizo_control(Sizo, files)}. virt_sizo_strategy(Sizo, files, prefix):- activate_strategy_prefix(prefix); virt_sizo_control(Sizo, files); not decided(virt_strategy(Sizo, files), 2). virt_sizo_strategy(Sizo, Resource, common):- virt_sizo_control(Sizo, Resource); not virt_sizo_strategy(Sizo, Resource, prefix); not decided(virt_strategy(Sizo, files), 2). dict_sizo(Sizo, Id):- Id= #sum{ 1, SizoLess : virt_sizo(SizoLess), SizoLess < Sizo}; virt_sizo(Sizo). % Connect to Latex %----------------------------------- latex_registered_subjects(sizo, Sizo):- virt_sizo(Sizo). latex_scope_demand(ScopeDemandSizo, sizo):- bind(Target, demand(sizo)); Target = s(_, _, ScopeDemandSizo). bind_scope(Scope, Sizo, strong):- bind_scope(Scope, assign_sizo(Sizo), strong). % Polymorphism based on virtualizaion strategy %----------------------------------- dfa_callguard(SymbRet, strategy(Strategy)):- dfa_callfn(SymbRet, Fn); bind_func(Fn, assign_zek_access(Resource)); SymbRet = s(_, _, Scope); bind_scope(Scope, assign_sizo(Sizo), strong); virt_sizo_strategy(Sizo, Resource, Strategy). late(SymbRet, SymbolSizo, Sizo, dfa_callguard(SymbRet, strategy(Strategy))):- bind_func(FnName, assign_zek_access(Resource)); virt_sizo_strategy(Sizo, Resource, Strategy); dfa_callfn(SymbRet, FnName); SymbRet=s(_, _, ScopeCaller); scope_fnbody(ScopeCaller, FnCallerBody); latex_symbol(FnCallerBody, sizo, SymbolSizo); virt_sizo(Sizo).