home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / LIB / STD_EXPA.EXP < prev    next >
Text File  |  1996-06-04  |  10KB  |  72 lines

  1. %    $Id: std_expander.exp,v 1.2 1994/12/09 00:24:25 duchier Exp $    
  2. module("std_expander")?
  3.  
  4. import_exp("acc_declarations")?
  5.  
  6. public(std_expander,comma,clauses,context,code,define,macro)?
  7.  
  8. associate_expanders(std_expander,make_expander)?
  9.  
  10. op(1000,xfy,comma)?
  11.  
  12. global(init_method,head_method,traverse_method,leaf_method,split_method,save_method,restore_method,merge_method,terminate_method,begin_body_method,end_body_method)?
  13.  
  14. :-(_A: std_expander,,(make_expander(_A,in_clauses => _B,out_clauses => []),,(maprel(assert,_B),fail))).
  15.  
  16. :-(make_expander(std_expander(_A,begin_body => begin_body_method,end_body => end_body_method,head => head_method,init => init_method,leaf => leaf_method,merge => merge_method,restore => restore_method,save => save_method,split => split_method,terminate => terminate_method),in_clauses => _B,out_clauses => _C),,(;(,(=(head_method,std),!),pred_info(head_method,[clauses,code])),,(;(,(=(save_method,std),!),pred_info(save_method,[context,code])),,(;(,(=(restore_method,std),!),pred_info(restore_method,[context,code])),,(;(,(=(leaf_method,std),!),pred_info(leaf_method,[clauses,context,code])),,(;(,(=(init_method,std),!),pred_info(init_method,[clauses])),,(;(,(=(begin_body_method,std),!),pred_info(begin_body_method,[context,code,clauses])),,(;(,(=(end_body_method,std),!),pred_info(end_body_method,[context,code,clauses])),,(;(,(=(terminate_method,std),!),pred_info(terminate_method,[code,clauses])),,(=(split_method,{std;@}),,(!,,(=(merge_method,{std;@}),,(!,,(=(traverse_method,str2psi(strcon(psi2str(_A),"_traverse"),current_module)),,(pred_info(_A,clauses),,(pred_info(traverse_method,[context,clauses,code]),,(first_clause(_A,_D),,(conj_clause(_E),,(disj_clause(_F),,(cond_clause(_G),,(macro_clause(_H),,(leaf_clause(_I),=(_B,[_D,_E,_F,_G,_H,_I|_C]))))))))))))))))))))))).
  17.  
  18. :-(first_clause(_A,_B),=(_B,:-(&(_A,@(:-(_C,_D),file => _E,in_clauses => _F,line => _G,out_clauses => _H)),comma(initialize(file => _E,line => _G),comma(head(_C,_I,in_clauses => _F,in_code => _J,in_context => _K,out_clauses => _L,out_code => _M,out_context => _N),comma(begin_body(in_clauses => _L,in_code => _M,in_context => _K,out_clauses => _O,out_code => _P,out_context => _Q),comma(traverse(_D,in_clauses => _O,in_code => _P,in_context => _Q,out_clauses => _R,out_code => _S,out_context => _T),comma(end_body(in_clauses => _R,in_code => _S,in_context => _T,out_clauses => _U,out_code => _V,out_context => _N),terminate(`(:-(_I,_J)),in_clauses => _U,in_code => _V,in_context => _K,out_clauses => _H,out_code => succeed,out_context => _N))))))))).
  19.  
  20. :-(conj_clause(_A),=(_A,:-(traverse(_B: @(_C,_D),in_clauses => _E,in_code => _F,in_context => _G,out_clauses => _H,out_code => _I,out_context => _J),,(`(:==(_B,,)),,(!,,(traverse(_C,in_clauses => _E,in_code => _F,in_context => _G,out_clauses => _K,out_code => _L,out_context => _M),traverse(_D,in_clauses => _K,in_code => _L,in_context => _M,out_clauses => _H,out_code => _I,out_context => _J))))))).
  21.  
  22. :-(disj_clause(_A),=(_A,:-(traverse(_B: @(_C,_D),in_clauses => _E,in_code => _F,in_context => _G,out_clauses => _H,out_code => _I,out_context => _J),,(`(:==(_B,;)),,(!,comma(split(in => _G,in_code => _F,out1 => _K,out2 => _L,out_code => _M),,(comma(save(in_code => _N,in_context => _K,out_code => _O,out_context => _P),comma(traverse(_C,in_clauses => _E,in_code => _O,in_context => _P,out_clauses => _Q,out_code => _R,out_context => _S),restore(in_code => _R,in_context => _S,out_code => succeed,out_context => _T))),,(comma(save(in_code => _U,in_context => _L,out_code => _V,out_context => _W),comma(traverse(_D,in_clauses => _Q,in_code => _V,in_context => _W,out_clauses => _H,out_code => _X,out_context => _Y),restore(in_code => _X,in_context => _Y,out_code => succeed,out_context => _Z))),,(merge(in1 => _T,in2 => _Z,in_code => _AA,out => _J,out_code => _I),=(_M,`(comma(;(_N,_U),_AA)))))))))))).
  23.  
  24. :-(cond_clause(_A),=(_A,:-(traverse(_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H),,(`(:==(_B,`(cond))),,(!,,(;(,(`(has_feature(1,_B,_I)),!),=(_I,"missing condition in the code!")),comma(split(in => _E,in_code => _D,out1 => _J,out2 => _K,out_code => _L),,(;(,(`(has_feature(2,_B,_M)),,(!,comma(save(in_code => _N,in_context => _J,out_code => _O,out_context => _P),comma(traverse(_M,in_clauses => _C,in_code => _O,in_context => _P,out_clauses => _Q,out_code => _R,out_context => _S),restore(in_code => _R,in_context => _S,out_code => succeed,out_context => _T))))),comma(save(in_code => _U,in_context => _J,out_code => _V,out_context => _W),comma(restore(in_code => _V,in_context => _W,out_code => succeed,out_context => _T),,(=(_C,_Q),=(_N,_U))))),,(;(,(`(has_feature(3,_B,_X)),,(!,comma(save(in_code => _Y,in_context => _K,out_code => _Z,out_context => _AA),comma(traverse(_X,in_clauses => _Q,in_code => _Z,in_context => _AA,out_clauses => _F,out_code => _AB,out_context => _AC),restore(in_code => _AB,in_context => _AC,out_code => succeed,out_context => _AD))))),comma(save(in_code => _AE,in_context => _K,out_code => _AF,out_context => _AG),comma(restore(in_code => _AF,in_context => _AG,out_code => succeed,out_context => _AD),,(=(_Q,_F),=(_Y,_AE))))),,(merge(in1 => _T,in2 => _AD,in_code => _AH,out => _H,out_code => _G),=(_L,`(comma(`(cond(_I,_N,_Y)),_AH))))))))))))).
  25.  
  26. :-(macro_clause(_A),=(_A,:-(traverse(_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H),,(`(macro(_B,_I)),,(!,traverse(_I,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H)))))).
  27.  
  28. :-(leaf_clause(_A),=(_A,:-(traverse(_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H),leaf(_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H)))).
  29.  
  30. ->(initialize(file => _A,line => _B),cond(:==(init_method,std),succeed,&(root_sort(init_method),@(file => _A,line => _B)))).
  31.  
  32. ->(terminate(_A,in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G),cond(:==(terminate_method,std),|(succeed,,(=(_B,[_A|_E]),=(_C,_F))),&(root_sort(terminate_method),@(in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G)))).
  33.  
  34. ->(head(_A,_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H),cond(:==(head_method,std),|(succeed,,(=(_C,_F),,(=(_B,_A),=(_D,_G)))),&(root_sort(head_method),@(_A,_B,in_clauses => _C,in_code => _D,in_context => _E,out_clauses => _F,out_code => _G,out_context => _H)))).
  35.  
  36. ->(begin_body(in_clauses => _A,in_code => _B,in_context => _C,out_clauses => _D,out_code => _E,out_context => _F),cond(:==(begin_body_method,std),|(succeed,,(=(_A,_D),,(=(_C,_F),=(_B,_E)))),&(root_sort(begin_body_method),@(in_clauses => _A,in_code => _B,in_context => _C,out_clauses => _D,out_code => _E,out_context => _F)))).
  37.  
  38. ->(end_body(in_clauses => _A,in_code => _B,in_context => _C,out_clauses => _D,out_code => _E,out_context => _F),cond(:==(end_body_method,std),|(succeed,,(=(_A,_D),,(=(_C,_F),=(_B,_E)))),&(root_sort(end_body_method),@(in_clauses => _A,in_code => _B,in_context => _C,out_clauses => _D,out_code => _E,out_context => _F)))).
  39.  
  40. ->(traverse(_A,in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G),&(root_sort(traverse_method),@(_A,in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G))).
  41.  
  42. ->(split(in => _A,in_code => _B,out1 => _C,out2 => _D,out_code => _E),cond(:==(split_method,std),|(succeed,,(=(_A,_C),,(=(_C,_D),=(_B,_E)))),&(root_sort(split_method),@(in => _A,in_code => _B,out1 => _C,out2 => _D,out_code => _E)))).
  43.  
  44. ->(save(in_code => _A,in_context => _B,out_code => _C,out_context => _D),cond(:==(save_method,std),|(succeed,,(=(_B,_D),=(_A,_C))),&(root_sort(save_method),@(in_code => _A,in_context => _B,out_code => _C,out_context => _D)))).
  45.  
  46. ->(restore(in_code => _A,in_context => _B,out_code => _C,out_context => _D),cond(:==(restore_method,std),|(succeed,,(=(_B,_D),=(_A,_C))),&(root_sort(restore_method),@(in_code => _A,in_context => _B,out_code => _C,out_context => _D)))).
  47.  
  48. ->(merge(in1 => _A,in2 => _B,in_code => _C,out => _D,out_code => _E),cond(:==(merge_method,std),|(succeed,,(=(_D,_A),,(=(_A,_B),=(_C,_E)))),&(root_sort(merge_method),@(in1 => _A,in2 => _B,in_code => _C,out => _D,out_code => _E)))).
  49.  
  50. ->(leaf(_A,in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G),cond(:==(leaf_method,std),|(succeed,,(=(_D,_G),,(=(_B,_E),=(_C,comma(_A,_F))))),&(root_sort(leaf_method),@(_A,in_clauses => _B,in_code => _C,in_context => _D,out_clauses => _E,out_code => _F,out_context => _G)))).
  51.  
  52. ->(comma(_A,_B),cond(:==(_A,succeed),_B,cond(:==(_B,succeed),_A,,(_A,_B)))).
  53.  
  54. persistent(macros_table)?
  55.  
  56. non_strict(define)?
  57.  
  58. :-(define(_A,_B),<<-(.(.(macros_table,current_module),_A),@(_A,_B))).
  59.  
  60. associate_expanders(define,define_expander)?
  61.  
  62. :-(define_expander(define(_A,_B),in_clauses => _C,out_clauses => _C),define(_A,_B)).
  63.  
  64. ->(macro(_A,_B),cond(:<(_A,string),submacro(features(.(macros_table,current_module),"std_expander"),_A,_B),macro2(_A,_B))).
  65.  
  66. ->(macro2(_A,_B),cond(has_feature(_A,.(macros_table,current_module),_C),|(true,=(@(_A,_B),copy_term(_C))),cond(is_sort(_A),submacro(features(macros_table,current_module),_A,_B),false))).
  67.  
  68. ->(submacro([_A|_B],_C,_D),cond(:<(_C,_A),|(true,=(@(_C,_D),copy_term(.(.(macros_table,current_module),_A)))),submacro(_B,_C,_D))).
  69.  
  70. ->(submacro([],@,@),false).
  71.  
  72.