#include #define STORLEK 20000 #define LANGD 50 #define PTAL 11 /* p[] */ #define bokstav(t) (97<=t&&t<=125||65<=t&&t<=93) #define liten(t) ((65<=t&&t<=93)?t+32:t) #define sann 1 #define falsk 0 #define ETT14 1<<14 #define DELORDMIN 5 #define ORDMIN 2 char ord[LANGD]; int tabell[STORLEK]; char lexf_namn[20],ordf_namn[20]; FILE *lexf, *ordf; long pow2[PTAL][LANGD]; /* NP, NW */ long p[] = { 319993, 319981, 319967, 319927, 319919, 319849, 319831, 319829, 319819, 319817, 319811}; main() { initiera(); oppna_filer(); tag_lexikon(); while(tagord(ord) ) { if(viktig(ord)) printf("%s\n",ord); } } tagord(ord) char ord[]; { char t; int i; int mer; do { i=0; mer = sann; while(mer) { t = getc(ordf); while(!bokstav(t) && t != EOF) if(t == '\n') { if((t=getc(ordf)) == '.') while( (t=getc(ordf)) != '\n' && t != EOF) t = getc(ordf); } else t=getc(ordf); while(bokstav(t)){ ord[i] = t; i++; t = getc(ordf); } if(t == '-') { t = getc(ordf); mer = (t == '\n' || bokstav(t)); if(bokstav(t)) ord[i++]=t; } else mer = falsk; } ord[i] = 0; }while( i>0 && i0); } initiera() { int i,j; long h; for(i=0; i=DELORDMIN; i--) { delaord(l,i,ord,ord2,ord3); /* printf("#%s=%s - %s\n",ord,ord2,ord3); */ if(i_lexikon(ord2)) { if(finns3(ord3,sann,delordefter)) { sprintf(delord,"%s\n%s",ord2,delordefter); return(sann); } else if(ord3[0] == 's') if(finns3( ord3+1,sann,delordefter )) { sprintf(delord,"%s\n%s",ord2,delordefter); return(sann); } } if( l-i != i) { delaord(l,l-i,ord,ord2,ord3); /* printf("#%s=%s-%s\n",ord,ord2,ord3); */ if(i_lexikon(ord2)) { if(finns3(ord3,sann,delordefter)) { sprintf(delord,"%s\n%s",ord2,delordefter); return(sann); } else if(ord3[0] == 's') if(finns3( ord3+1,sann,delordefter )) { sprintf(delord,"%s\n%s",ord2,delordefter); return(sann); } } } } return(falsk); } i_lexikon(ord) char ord[]; { int i,j; long h; for(i=0; i>4] & ( 1<<((int) h & 017))) ) { return(0); } } return(1); } oppna_filer() { fprintf(stderr,"Ge namnet p} den existerande ordfilen:"); scanf("%s",ordf_namn); while((ordf = fopen(ordf_namn,"r")) == NULL) { fprintf(stderr,"Fel hos filen %s, ge nytt filnamn:",ordf_namn); scanf("%s",ordf_namn); } fprintf(stderr,"Ge namnet p} den anv{nda lexikonfilen:"); scanf("%s",lexf_namn); while((lexf = fopen(lexf_namn,"r")) == NULL) { fprintf(stderr,"Fel hos filen %s, ge nytt filnamn:",lexf_namn); scanf("%s",lexf_namn); } } tag_lexikon() { fread(tabell,(sizeof(int)),STORLEK,lexf); } delaord(l,i,ord,ord2,ord3) int l,i; char ord[], ord2[], ord3[]; { int j,k; for(j=0; j