⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 中科院开源的ictprop源码,使用方法: 1、修改源码中的InputComboBox.cpp文件 InvokeAction里面的txt文件路径换成你的本地路径; 2、入口在帮助里面
💻 CPP
字号:
#include "stdafx.h"
#include <string.h>
#include "symbol.h"
#include "grmrgrph.h"
#include "rrtbl.h"
#include "error.h"
#include "grmrpars.h"
#include "roleinvs.h"
#include "sntncepars.h"
#include "sntncelex.h"
#include <sys/timeb.h>
#include <time.h>
#include <conio.h>
#include "monitor.h"

#define CMDLEN 80
#define MAXARGS 4
#define MAXOPTIONS 10
#define FOREST "forest.txt"
#define EDGES "edges.txt"
char treebuf[20000];
char tokenbuf[100];
int brp;
int T=0;

CString str;

char *strippostfix(char *cate){
	int i, catelen;

	catelen=strlen(cate);

	for (i=0; i<catelen; i++){
		if (cate[i]=='_')
			break;
		tokenbuf[i]=cate[i];
	}
	tokenbuf[i]='\0';
	return tokenbuf;


}

printvpf(pf_t *ppf){
	unsigned int curpos, sublen;
//	unsigned __int64 curser;
    subpf_t subpf;

	if (ppf->subpfs==NULL){
		strcat(treebuf, strippostfix(code2token(ppf->cate)));
		strcat(treebuf, "(");
		strcat(treebuf, ppf->litoramb.literal);
		strcat(treebuf, ")");
		return 0;
	}

	subpf=ppf->subpfs[0];

	strcat(treebuf, strippostfix(code2token(ppf->cate)));
	strcat(treebuf, " ( ");

    sublen=rightlenof(subpf.rulno);
    for (curpos=0;curpos<sublen;curpos++){
	    printvpf(subpf.sublst[curpos]);
		if (curpos<sublen-1)
			strcat(treebuf, " ");
	}
    strcat(treebuf, " ) ");

	return 0;
}


getoptions(char **argv, int *parmpos, char *options){
  int nop=0, pos=0;
  char flag;

  if (argv[*parmpos]==NULL || argv[*parmpos][0]!='-')
     return 0;

  while ((flag=argv[*parmpos][++pos])!='\0'){
    int scanner=0;

    while (scanner<nop && options[scanner]!=flag)
      scanner++;

    if (scanner==nop){
       nop++;
       if (nop>MAXOPTIONS){
          theMonitor.display("Too Many flags.\n");
          return -1;
       }
    }
    options[scanner]=flag;
  }

  (*parmpos)++;
  return nop;
}

exeparse(char **argv, int argc){
  char *sfile=NULL, options[MAXOPTIONS];
  int nop=0, soption=0, ioption=0, parmpos=1;
  int i;
  clock_t start,  finish;
  clock_t starti, finishi;
  extern FILE *pfedgs;

  double duration;
  extern pf_t *pfroot;


  if ((nop=getoptions(argv, &parmpos, options))<0)
     return 0;

  while (--nop>=0)
    switch (options[nop]){
    case 's':soption=1;break;
    case 'i':ioption=1;break;
    default :str.Format("Unkown flag %c.\n", options[nop]); theMonitor.display(str);return 0;
    }
  
  if (parmpos<argc){
     sfile=argv[parmpos++];
     if (parmpos<argc){
        ntrees=atoi(argv[parmpos]);
     }
  }

  if (!rrready){
	 str.Format("No gramar present.\n");
     theMonitor.display(str);
     return 0;
  }

  if (sfile!=NULL){
     pfs=fopen(sfile, "r");
     if (pfs==NULL){
		str.Format("Unable to open file %s.\n", sfile);
        theMonitor.display(str);
        return 0;
     }
  }
  else
     pfs=stdin;

  pft=fopen(FOREST, "w+t");
  if (pft==NULL){
	    str.Format("Unable to open file %s.\n", "forest.txt");
        theMonitor.display(str);
        return 0;
  }

  pfedgs=fopen(EDGES, "w+t");

  symbmode=soption;
  interactive=ioption;
 
  rrset=(rrset_struct *)calloc(arccount+2, sizeof (rrset_struct));
  for (i=0;i<=(arccount+1);i++){
	  rrset[i].prr=NULL;
	  rrset[i].next=-1;
  }

  catetbl=(pf_t **)calloc(MAXCNODE*tntcount, sizeof(pf_t *));


  lstack=(unsigned int*)calloc(tntcount, sizeof(unsigned int));

  addchartnode();
//  mark=(char *)malloc(ntcount);
  mymark=(char *)malloc(tntcount);



  edgepool=(edge_t *)calloc(MAXENODE, sizeof(edge_t));  
  trnodepool=(pf_t *)calloc(MAXTNODE, sizeof(pf_t));
 // compedgepool=(edge_t *)calloc(MAXSTACK, sizeof(edge_t));
  T=0;
  start = clock();   
  while (!feof(pfs)){
	  extern int nedge;

	  sentbuf[0]='\0';
	  fgets(sentbuf, MAXSENTLEN, pfs);
	  str.Format("%s", sentbuf);
	  theMonitor.list(str);
      starti = clock();   //u
      parses();
		T++;
        if (pfroot!=NULL){
  
		   /*
           ambcnt=countbranch(pfroot);
           fprintf(pft, "%I64d Trees:\n", ambcnt);
  
           for (i=1;(i<=ambcnt)&&(i<=ntrees);i++){
			   treebuf[0]='\0';
               printpf(pfroot, i-1);
	           fprintf(pft, "%s\n", treebuf);
		   }

		   */
		   treebuf[0]='\0';
		   printvpf(pfroot);
		   fprintf(pft, "%s\n", treebuf);
		   str.Format("%s", treebuf);
		   theMonitor.show(T, str);
		   //fprintf(pft, "Probability: %.15f\n", pfroot->prb);
		   str.Format("%d:success\n",T);
		   theMonitor.display(str);
           //_cprintf("%d", T);
		   //clear, take 4 as the maximum length
           //_putch(8);  _putch(8);  _putch(8);  _putch(8);
		}
		else{
			fprintf(pft, "NA\n");
			str.Format("%d:fail\n", T);
			theMonitor.display(str);
		}

        releasewholepf();
		finishi = clock();//n
		//fprintf(pft, "parsed in %2.6f seconds\n\n", (double)(finishi - starti) / CLOCKS_PER_SEC);

  }
  finish = clock();

  duration = (double)(finish - start) / CLOCKS_PER_SEC;
  str.Format( "%d sentences parsed in %2.6f seconds\n", T, duration );
  theMonitor.display(str);

  free(rrset);
  free(catetbl);
//  free(mark);
  free(mymark);
  free(edgepool);
  free(trnodepool);
//  free(compedgepool);
  releasechart();
  if (pfs!=stdin)
     fclose(pfs);
  fclose(pft);
  fclose(pfedgs);


  return 0;
}

exebuild(char **argv, int argc){
  char *gfile=NULL, options[MAXOPTIONS];
  int nop=0, voption=0, parmpos=1;

  if ((nop=getoptions(argv, &parmpos, options))<0)
     return 0;
  if (nop)
     switch (options[0]){
     case 'v': voption=1;break;
     default : str.Format("Unkown flag %c.\n", options[0]);return 0;
  }

  if (parmpos<argc){
     gfile=argv[parmpos++];
     if (parmpos<argc){
        str.Format("Meaningless argument(s) followed.\n");
		theMonitor.display(str);
        return 0;
     }
  }
  
  if (gfile!=NULL){
     pfg=fopen(gfile, "r");
     if (pfg==NULL){
        str.Format("Unable to open file %s.\n", gfile);
		theMonitor.display(str);
        return 0;
     }
  }
  else
     pfg=stdin;
  
  pfd=pfg;/*fopen("dict.txt", "r");*/
  /*
  if (pfd==NULL){
	  printf("Unable to open file %s.\n", "dict.txt");
	  return 0;
  }*/

  release();
  verbose=voption;
  ECHK(parseg();, {if (pfg!=stdin) fclose(pfg);errecovery();return 0;})
  ECHK(installdict();fclose(pfg);, {errecovery();return 0;})
  ECHK(roleinvr();genexpec();, {errecovery();return 0;})
  genpostfix();
  if (verbose)
     listrr();

  str.Format("%s is %s", gfile,"built successfully.\n");
  theMonitor.display(str);
  return 0;
}

execmd(char *cmdline){
  char *argv[MAXARGS], *args;
  int i, argc=0, retval=0;

  for (i=0;i<MAXARGS;i++)
      argv[i]=NULL;

  if ((args=strtok(cmdline, " "))==NULL)
     return retval;
  
  do{
    argv[argc]=(char *)malloc(sizeof(char)*(strlen(args)+1));
    strcpy(argv[argc], args);
    argc++;
  }while (argc<MAXARGS && (args=strtok(NULL, " "))!=NULL);
  
  if (argc==MAXARGS){
       str.Format("Too Many Arguments.\n");
		theMonitor.display(str);
  }
  else{
     if (strcmp(argv[0], "parse")==0)
        retval=exeparse(argv, argc);
     else
     if (strcmp(argv[0], "build")==0)
        retval=exebuild(argv, argc);
     else
     if (strcmp(argv[0], "quit")==0)
        retval=-1;
     else{
        str.Format("Unknown command.\n");
		theMonitor.display(str);
	 }
  }
  
  for (i=0;i<argc;i++)
      free(argv[i]);

  return retval;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -