home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / SOURCE / ARITY.C next >
C/C++ Source or Header  |  1996-06-04  |  3KB  |  206 lines

  1. /*     $Id: arity.c,v 1.2 1994/12/08 23:03:22 duchier Exp $     */
  2.  
  3. #ifndef lint
  4. static char vcid[] = "$Id: arity.c,v 1.2 1994/12/08 23:03:22 duchier Exp $";
  5. #endif /* lint */
  6.  
  7. static int dummy;
  8.  
  9. #ifdef ARITY
  10.  
  11. #include "extern.h"
  12. #include "trees.h"
  13.  
  14. FILE *features;
  15. static int Aunif=0;
  16. static int Amerge=0;
  17. static int Aadd=0;
  18. static int Atop=0;
  19. static int Atoptop=0;
  20. static int Auid=0;
  21. static int Audiff=0;
  22. static int Anil=0;
  23. static int Anilnil=0;
  24. static int Aident=0;
  25. static int Adiff=0;
  26. static int Aglb=0;
  27.  
  28.  
  29. #define PERUNIF(X)  X,100.0*((double)X/(double)Aunif)
  30. #define PERMERGE(X)  X,100.0*((double)X/(double)Amerge)
  31.  
  32.  
  33. void arity_init()
  34. {
  35.   /*
  36.   features=fopen("/udir/rmeyer/LIFE/MODULE/features","w");
  37.   if(!features) {
  38.     Errorline("Couldn't open feature log file\n");
  39.     abort_life();
  40.   }
  41.   */
  42. }
  43.  
  44.  
  45. void arity_end()
  46. {
  47.   
  48.   /* fclose(features); */
  49.   
  50.   features=fopen("/udir/rmeyer/LIFE/MODULE/profile","w");
  51.   if(features) {
  52.     fprintf(features,"---- Unifications and Features ----\n\n");
  53.     
  54.     fprintf(features,"add feature: %d\n\n",Aadd);
  55.     
  56.     fprintf(features,"unify: %d\n",Aunif);
  57.     fprintf(features,"types:\n");
  58.     fprintf(features,"\ttop-top: %d = %3.1lf\n",PERUNIF(Atoptop));
  59.     fprintf(features,"\ttop-X: %d = %3.1lf\n",PERUNIF(Atop));
  60.     fprintf(features,"\tX-X: %d = %3.1lf\n",PERUNIF(Auid));
  61.     fprintf(features,"\tX-Y: %d = %3.1lf\n",PERUNIF(Audiff));
  62.     fprintf(features,"\tGLB: %d = %3.1lf\n",PERUNIF(Aglb));
  63.  
  64.     fprintf(features,"merges: %d = %3.1lf\n",PERUNIF(Amerge));
  65.  
  66.     fprintf(features,"\tnil-nil: %d = %3.1lf\n",PERMERGE(Anilnil));
  67.     fprintf(features,"\tnil-X: %d = %3.1lf\n",PERMERGE(Anil));
  68.     fprintf(features,"\tX-X: %d = %3.1lf\n",PERMERGE(Aident));
  69.     fprintf(features,"\tX-Y: %d = %3.1lf\n",PERMERGE(Adiff));
  70.     
  71.     fclose(features);
  72.   }
  73. }
  74.  
  75.  
  76.  
  77. void rec_print_feat(n)
  78.      
  79.      ptr_node n;
  80. {
  81.   if(n) {
  82.     if(n->left) {
  83.       rec_print_feat(n->left);
  84.       fprintf(features,",");
  85.     }
  86.     
  87.     fprintf(features,n->key);
  88.     
  89.     if(n->right) {
  90.       fprintf(features,",");
  91.       rec_print_feat(n->right);
  92.     }
  93.   }
  94. }
  95.  
  96.  
  97.  
  98. void print_features(u)
  99.  
  100.      ptr_node u;
  101. {
  102.   fprintf(features,"(");
  103.   rec_print_feat(u);
  104.   fprintf(features,")");
  105. }
  106.  
  107.  
  108.  
  109. int check_equal(u,v)
  110.  
  111.      ptr_node u;
  112.      ptr_node v;
  113. {
  114.   int same=TRUE;
  115.   
  116.   if(u) {
  117.     same=check_equal(u->left,v) &&
  118.       find(featcmp,u->key,v) &&
  119.     check_equal(u->right,v);
  120.   }
  121.  
  122.   return same;
  123. }
  124.  
  125.  
  126.  
  127. void arity_unify(u,v)
  128.      ptr_psi_term u;
  129.      ptr_psi_term v;
  130. {
  131.   Aunif++;
  132.  
  133.   if(u->type==top)
  134.     if(v->type==top)
  135.       Atoptop++;
  136.     else
  137.       Atop++;
  138.   else
  139.     if(v->type==top)
  140.       Atop++;
  141.     else
  142.       if(u->type==v->type)
  143.     Auid++;
  144.       else
  145.     if(u->type->children || v->type->children)
  146.       Aglb++;
  147.     else
  148.       Audiff++;
  149.  
  150.   /*
  151.     fprintf(features,
  152.     "unify: %s %s\n",
  153.     u->type->keyword->symbol,
  154.     v->type->keyword->symbol);
  155.     */
  156. }
  157.  
  158.  
  159.  
  160. void arity_merge(u,v)
  161.      ptr_node u;
  162.      ptr_node v;
  163. {
  164.   Amerge++;
  165.   
  166.   if(u)
  167.     if(v)
  168.       if(check_equal(u,v))
  169.     Aident++;
  170.       else
  171.     Adiff++;
  172.     else
  173.       Anil++;
  174.   else
  175.     if(v)
  176.       Anil++;
  177.     else
  178.       Anilnil++;
  179.  
  180.   /*
  181.     fprintf(features,"merge: ");
  182.     print_features(u);
  183.     fprintf(features," ");
  184.     print_features(v);
  185.     fprintf(features,"\n");
  186.     */
  187. }
  188.  
  189.  
  190.  
  191. void arity_add(u,s)
  192.  
  193.      ptr_psi_term u;
  194.      char *s;
  195. {
  196.   Aadd++;
  197.  
  198.   /*
  199.   fprintf(features,"add %s to %s",s,u->type->keyword->symbol);
  200.   print_features(u->attr_list);
  201.   fprintf(features,"\n");
  202.   */
  203. }
  204.  
  205. #endif
  206.