MAIN.Cpp
上传用户:tenhai
上传日期:2021-02-19
资源大小:492k
文件大小:7k
源码类别:

组合框控件

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include <string.h>
  3. #include "symbol.h"
  4. #include "grmrgrph.h"
  5. #include "rrtbl.h"
  6. #include "error.h"
  7. #include "grmrpars.h"
  8. #include "roleinvs.h"
  9. #include "sntncepars.h"
  10. #include "sntncelex.h"
  11. #include <sys/timeb.h>
  12. #include <time.h>
  13. #include <conio.h>
  14. #include "monitor.h"
  15. #define CMDLEN 80
  16. #define MAXARGS 4
  17. #define MAXOPTIONS 10
  18. #define FOREST "forest.txt"
  19. #define EDGES "edges.txt"
  20. char treebuf[20000];
  21. char tokenbuf[100];
  22. int brp;
  23. int T=0;
  24. CString str;
  25. char *strippostfix(char *cate){
  26. int i, catelen;
  27. catelen=strlen(cate);
  28. for (i=0; i<catelen; i++){
  29. if (cate[i]=='_')
  30. break;
  31. tokenbuf[i]=cate[i];
  32. }
  33. tokenbuf[i]='';
  34. return tokenbuf;
  35. }
  36. printvpf(pf_t *ppf){
  37. unsigned int curpos, sublen;
  38. // unsigned __int64 curser;
  39.     subpf_t subpf;
  40. if (ppf->subpfs==NULL){
  41. strcat(treebuf, strippostfix(code2token(ppf->cate)));
  42. strcat(treebuf, "(");
  43. strcat(treebuf, ppf->litoramb.literal);
  44. strcat(treebuf, ")");
  45. return 0;
  46. }
  47. subpf=ppf->subpfs[0];
  48. strcat(treebuf, strippostfix(code2token(ppf->cate)));
  49. strcat(treebuf, " ( ");
  50.     sublen=rightlenof(subpf.rulno);
  51.     for (curpos=0;curpos<sublen;curpos++){
  52.     printvpf(subpf.sublst[curpos]);
  53. if (curpos<sublen-1)
  54. strcat(treebuf, " ");
  55. }
  56.     strcat(treebuf, " ) ");
  57. return 0;
  58. }
  59. getoptions(char **argv, int *parmpos, char *options){
  60.   int nop=0, pos=0;
  61.   char flag;
  62.   if (argv[*parmpos]==NULL || argv[*parmpos][0]!='-')
  63.      return 0;
  64.   while ((flag=argv[*parmpos][++pos])!=''){
  65.     int scanner=0;
  66.     while (scanner<nop && options[scanner]!=flag)
  67.       scanner++;
  68.     if (scanner==nop){
  69.        nop++;
  70.        if (nop>MAXOPTIONS){
  71.           theMonitor.display("Too Many flags.n");
  72.           return -1;
  73.        }
  74.     }
  75.     options[scanner]=flag;
  76.   }
  77.   (*parmpos)++;
  78.   return nop;
  79. }
  80. exeparse(char **argv, int argc){
  81.   char *sfile=NULL, options[MAXOPTIONS];
  82.   int nop=0, soption=0, ioption=0, parmpos=1;
  83.   int i;
  84.   clock_t start,  finish;
  85.   clock_t starti, finishi;
  86.   extern FILE *pfedgs;
  87.   double duration;
  88.   extern pf_t *pfroot;
  89.   if ((nop=getoptions(argv, &parmpos, options))<0)
  90.      return 0;
  91.   while (--nop>=0)
  92.     switch (options[nop]){
  93.     case 's':soption=1;break;
  94.     case 'i':ioption=1;break;
  95.     default :str.Format("Unkown flag %c.n", options[nop]); theMonitor.display(str);return 0;
  96.     }
  97.   
  98.   if (parmpos<argc){
  99.      sfile=argv[parmpos++];
  100.      if (parmpos<argc){
  101.         ntrees=atoi(argv[parmpos]);
  102.      }
  103.   }
  104.   if (!rrready){
  105.  str.Format("No gramar present.n");
  106.      theMonitor.display(str);
  107.      return 0;
  108.   }
  109.   if (sfile!=NULL){
  110.      pfs=fopen(sfile, "r");
  111.      if (pfs==NULL){
  112. str.Format("Unable to open file %s.n", sfile);
  113.         theMonitor.display(str);
  114.         return 0;
  115.      }
  116.   }
  117.   else
  118.      pfs=stdin;
  119.   pft=fopen(FOREST, "w+t");
  120.   if (pft==NULL){
  121.     str.Format("Unable to open file %s.n", "forest.txt");
  122.         theMonitor.display(str);
  123.         return 0;
  124.   }
  125.   pfedgs=fopen(EDGES, "w+t");
  126.   symbmode=soption;
  127.   interactive=ioption;
  128.  
  129.   rrset=(rrset_struct *)calloc(arccount+2, sizeof (rrset_struct));
  130.   for (i=0;i<=(arccount+1);i++){
  131.   rrset[i].prr=NULL;
  132.   rrset[i].next=-1;
  133.   }
  134.   catetbl=(pf_t **)calloc(MAXCNODE*tntcount, sizeof(pf_t *));
  135.   lstack=(unsigned int*)calloc(tntcount, sizeof(unsigned int));
  136.   addchartnode();
  137. //  mark=(char *)malloc(ntcount);
  138.   mymark=(char *)malloc(tntcount);
  139.   edgepool=(edge_t *)calloc(MAXENODE, sizeof(edge_t));  
  140.   trnodepool=(pf_t *)calloc(MAXTNODE, sizeof(pf_t));
  141.  // compedgepool=(edge_t *)calloc(MAXSTACK, sizeof(edge_t));
  142.   T=0;
  143.   start = clock();   
  144.   while (!feof(pfs)){
  145.   extern int nedge;
  146.   sentbuf[0]='';
  147.   fgets(sentbuf, MAXSENTLEN, pfs);
  148.   str.Format("%s", sentbuf);
  149.   theMonitor.list(str);
  150.       starti = clock();   //u
  151.       parses();
  152. T++;
  153.         if (pfroot!=NULL){
  154.   
  155.    /*
  156.            ambcnt=countbranch(pfroot);
  157.            fprintf(pft, "%I64d Trees:n", ambcnt);
  158.   
  159.            for (i=1;(i<=ambcnt)&&(i<=ntrees);i++){
  160.    treebuf[0]='';
  161.                printpf(pfroot, i-1);
  162.            fprintf(pft, "%sn", treebuf);
  163.    }
  164.    */
  165.    treebuf[0]='';
  166.    printvpf(pfroot);
  167.    fprintf(pft, "%sn", treebuf);
  168.    str.Format("%s", treebuf);
  169.    theMonitor.show(T, str);
  170.    //fprintf(pft, "Probability: %.15fn", pfroot->prb);
  171.    str.Format("%d:successn",T);
  172.    theMonitor.display(str);
  173.            //_cprintf("%d", T);
  174.    //clear, take 4 as the maximum length
  175.            //_putch(8);  _putch(8);  _putch(8);  _putch(8);
  176. }
  177. else{
  178. fprintf(pft, "NAn");
  179. str.Format("%d:failn", T);
  180. theMonitor.display(str);
  181. }
  182.         releasewholepf();
  183. finishi = clock();//n
  184. //fprintf(pft, "parsed in %2.6f secondsnn", (double)(finishi - starti) / CLOCKS_PER_SEC);
  185.   }
  186.   finish = clock();
  187.   duration = (double)(finish - start) / CLOCKS_PER_SEC;
  188.   str.Format( "%d sentences parsed in %2.6f secondsn", T, duration );
  189.   theMonitor.display(str);
  190.   free(rrset);
  191.   free(catetbl);
  192. //  free(mark);
  193.   free(mymark);
  194.   free(edgepool);
  195.   free(trnodepool);
  196. //  free(compedgepool);
  197.   releasechart();
  198.   if (pfs!=stdin)
  199.      fclose(pfs);
  200.   fclose(pft);
  201.   fclose(pfedgs);
  202.   return 0;
  203. }
  204. exebuild(char **argv, int argc){
  205.   char *gfile=NULL, options[MAXOPTIONS];
  206.   int nop=0, voption=0, parmpos=1;
  207.   if ((nop=getoptions(argv, &parmpos, options))<0)
  208.      return 0;
  209.   if (nop)
  210.      switch (options[0]){
  211.      case 'v': voption=1;break;
  212.      default : str.Format("Unkown flag %c.n", options[0]);return 0;
  213.   }
  214.   if (parmpos<argc){
  215.      gfile=argv[parmpos++];
  216.      if (parmpos<argc){
  217.         str.Format("Meaningless argument(s) followed.n");
  218. theMonitor.display(str);
  219.         return 0;
  220.      }
  221.   }
  222.   
  223.   if (gfile!=NULL){
  224.      pfg=fopen(gfile, "r");
  225.      if (pfg==NULL){
  226.         str.Format("Unable to open file %s.n", gfile);
  227. theMonitor.display(str);
  228.         return 0;
  229.      }
  230.   }
  231.   else
  232.      pfg=stdin;
  233.   
  234.   pfd=pfg;/*fopen("dict.txt", "r");*/
  235.   /*
  236.   if (pfd==NULL){
  237.   printf("Unable to open file %s.n", "dict.txt");
  238.   return 0;
  239.   }*/
  240.   release();
  241.   verbose=voption;
  242.   ECHK(parseg();, {if (pfg!=stdin) fclose(pfg);errecovery();return 0;})
  243.   ECHK(installdict();fclose(pfg);, {errecovery();return 0;})
  244.   ECHK(roleinvr();genexpec();, {errecovery();return 0;})
  245.   genpostfix();
  246.   if (verbose)
  247.      listrr();
  248.   str.Format("%s is %s", gfile,"built successfully.n");
  249.   theMonitor.display(str);
  250.   return 0;
  251. }
  252. execmd(char *cmdline){
  253.   char *argv[MAXARGS], *args;
  254.   int i, argc=0, retval=0;
  255.   for (i=0;i<MAXARGS;i++)
  256.       argv[i]=NULL;
  257.   if ((args=strtok(cmdline, " "))==NULL)
  258.      return retval;
  259.   
  260.   do{
  261.     argv[argc]=(char *)malloc(sizeof(char)*(strlen(args)+1));
  262.     strcpy(argv[argc], args);
  263.     argc++;
  264.   }while (argc<MAXARGS && (args=strtok(NULL, " "))!=NULL);
  265.   
  266.   if (argc==MAXARGS){
  267.        str.Format("Too Many Arguments.n");
  268. theMonitor.display(str);
  269.   }
  270.   else{
  271.      if (strcmp(argv[0], "parse")==0)
  272.         retval=exeparse(argv, argc);
  273.      else
  274.      if (strcmp(argv[0], "build")==0)
  275.         retval=exebuild(argv, argc);
  276.      else
  277.      if (strcmp(argv[0], "quit")==0)
  278.         retval=-1;
  279.      else{
  280.         str.Format("Unknown command.n");
  281. theMonitor.display(str);
  282.  }
  283.   }
  284.   
  285.   for (i=0;i<argc;i++)
  286.       free(argv[i]);
  287.   return retval;
  288. }