|
|
1.1 ! root 1: #include "names.h" ! 2: #include "conp.h" ! 3: char lastc,nextc; ! 4: int savsub; ! 5: scan(si,ce,command) /*scan a phrase */ ! 6: int si; ! 7: char ce; ! 8: { ! 9: char c; ! 10: i=si; ! 11: if(command == 1)subty = PLURAL; ! 12: else subty = 0; ! 13: if(sent[i].cc==ADJ_ADV && sent[i+1].cc != NOUN && sent[i+1].cc != UNK && sent[i+1].cc != ADJ) ! 14: sent[i++].cc = ADV; ! 15: done=0; ! 16: verb = 0; ! 17: verb=getv(i,ce); /*get verb if obvious*/ ! 18: if(command == 0)j=getnoun(i,ce); /*get subject*/ ! 19: else j = si; ! 20: if(i != j || ((i==j) && sent[i].cc == NOUN)){ ! 21: i = j+1; ! 22: } ! 23: for(;((c=sent[i].cc) != ce) && (c != END) && (c != '\0');i++){ ! 24: nextc=sent[i+1].cc; ! 25: if(i>0){ ! 26: lastc=sent[i-1].cc; ! 27: if(lastc==BE)be=1; ! 28: else{ ! 29: if(lastc != ADV)be=0; ! 30: } ! 31: } ! 32: else lastc=0; ! 33: if(verb==1)question=0; ! 34: switch(c){ ! 35: case '"': ! 36: if(nextc==ED){ ! 37: verb=1; ! 38: sent[++i].cc=VERB; ! 39: subty=SING; ! 40: continue; ! 41: } ! 42: subty=0; ! 43: verb=getv(++i,ce); ! 44: i=getnoun(i,ce); ! 45: continue; ! 46: case ART: ! 47: case ADJ: ! 48: case POS: ! 49: case ING: ! 50: aflg=1; ! 51: i=getnoun(i,ce); ! 52: aflg=0; ! 53: continue; ! 54: case PREP: ! 55: if(nextc == ce){ ! 56: sent[i].cc=ADV; ! 57: goto sdone; ! 58: } ! 59: prep=1; ! 60: i=getnoun(++i,ce); ! 61: prep=0; ! 62: continue; ! 63: case VERB_ADJ: ! 64: if(verb==0){ ! 65: sent[i].cc=VERB; ! 66: verb=1; ! 67: continue; ! 68: } ! 69: case NOUN_ADJ: ! 70: if(be==1){ ! 71: sent[i].cc=ADJ; ! 72: continue; ! 73: } ! 74: case PRONP_ADJ: ! 75: case PRONS_ADJ: ! 76: i=getnoun(i,ce); ! 77: continue; ! 78: case NOUN_ADV: ! 79: if(verb == 1 && iverb == i+1){ ! 80: sent[i].cc = NOUN; ! 81: } ! 82: else { ! 83: sent[i].cc = ADV; ! 84: } ! 85: continue; ! 86: case ADJ_ADV: ! 87: if(be == 1){ ! 88: if(nextc == ADJ || nextc == NOUN_ADJ || nextc == ADJ_ADV || nextc == UNK){ ! 89: sent[i].cc = ADV; ! 90: continue; ! 91: } ! 92: if(nextc == ',' && (sent[i+2].cc == ADJ_ADV || sent[i+2].cc == ADV)){ ! 93: sent[i++].cc = ADV; ! 94: sent[++i].cc = ADV; ! 95: comma--; ! 96: continue; ! 97: } ! 98: sent[i].cc = ADJ; ! 99: continue; ! 100: } ! 101: if(lastc == NOUN && (nextc == ',' || nextc == END)){ ! 102: sent[i].cc=ADJ; ! 103: continue; ! 104: } ! 105: if(nextc!= UNK && nextc != NOUN_VERB && nextc != NOUN && nextc != NV_PL){ ! 106: sent[i].cc=ADV; ! 107: continue; ! 108: } ! 109: sent[i].cc=ADJ; ! 110: continue; ! 111: case WHO: ! 112: i=who(i,ce); ! 113: continue; ! 114: case PRONP: ! 115: subty=PLURAL; ! 116: continue; ! 117: case NOUN: ! 118: if(nextc==NOUN){ ! 119: sent[i].cc=ADJ; ! 120: continue; ! 121: } ! 122: case PRONS: ! 123: subty=SING; ! 124: continue; ! 125: case CONJ: ! 126: if(nextc==UNK || nextc == NOUN_VERB || nextc == NV_PL){ ! 127: if(lastc == ADJ)sent[++i].cc = ADJ; ! 128: else sent[++i].cc = VERB; ! 129: } ! 130: if(nextc == ED){ ! 131: sent[++i].cc = VERB; ! 132: } ! 133: continue; ! 134: case AUXP: ! 135: case AUXS: ! 136: case BES: ! 137: case BEP: ! 138: case AUXV: ! 139: case AUX: ! 140: case HAS: ! 141: case HAVE: ! 142: case HAD: ! 143: verb=getv(i,ce); ! 144: continue; ! 145: case ADV: ! 146: case AUXX: ! 147: case VERB: ! 148: case BE: ! 149: case INTER: ! 150: continue; ! 151: case THAT: ! 152: if(nextc==SUBCONJ){ ! 153: sent[i].cc=PRONP; ! 154: goto subc; ! 155: } ! 156: verb=getv(i+1,ce); ! 157: j = i+1; ! 158: while(sent[j].cc == ADV || sent[j].cc == ADJ_ADV){ ! 159: j++; ! 160: } ! 161: if((verb==1 && iverb== j) || sent[j].cc==ED || sent[j].cc == VERB_ADJ){ ! 162: sent[i].cc=PRONP; ! 163: while(i+1 < j)sent[++i].cc = ADV; ! 164: } ! 165: else if(verb==0 && nextc==NV_PL && ((lastc==NOUN ! 166: && (sent[i-1].ic==UNK || sent[i-1].ic==NOUN_VERB|| sent[i-1].ic==NOUN))|| lastc == ',')){ ! 167: sent[i].cc=PRONP; ! 168: subty=SING; ! 169: } ! 170: else if(verb==0 && (nextc==UNK || nextc==NOUN_VERB) && (lastc==NOUN ! 171: && sent[i-1].ic==NV_PL)){ ! 172: subty=PLURAL; ! 173: sent[i].cc=PRONP; ! 174: } ! 175: else { ! 176: if(i == 0)sent[i].cc=ADJ; ! 177: else sent[i].cc=SUBCONJ; ! 178: j=i; ! 179: subty=0; ! 180: i=getnoun(i+1,ce); ! 181: if(done)sent[j].cc=ADJ; ! 182: } ! 183: continue; ! 184: case ',': ! 185: if(nextc != CONJ){ /*parenthetical*/ ! 186: continue; ! 187: } ! 188: i++; ! 189: comma--; ! 190: if(sent[i+1].cc == ED){ ! 191: sent[++i].cc = VERB; ! 192: continue; ! 193: } ! 194: if(command == 1){ ! 195: verb = getv(++i,ce); ! 196: continue; ! 197: } ! 198: case SUBCONJ: ! 199: subc: ! 200: if(nextc==END||(lastc==',' && nextc==',')){ ! 201: sent[i].cc=ADV; ! 202: continue; ! 203: } ! 204: subty=0; ! 205: ce=','; ! 206: verb=getv(++i,ce); ! 207: i=getnoun(i,ce); ! 208: continue; ! 209: case PREP_ADV: ! 210: if(sent[i+2].cc==PREP_ADV &&(sent[i+1].cc != NOUN && sent[i+1].cc != NOUN_VERB ! 211: && sent[i+1].cc != NV_PL)){ ! 212: sent[i].cc=ADV; ! 213: sent[i+2].cc=CONJ; ! 214: continue; ! 215: } ! 216: sav=i++; ! 217: savsub = subty; ! 218: pverb=getv(i,ce); ! 219: if((pverb==1 && iverb == i) || sent[i].cc== ED){ ! 220: sent[sav].cc=PRONP; ! 221: sent[i].cc=VERB; ! 222: continue; ! 223: } ! 224: i=getnoun(i,ce); ! 225: if(done==1){ ! 226: sent[sav].cc=ADV; ! 227: goto sdone; ! 228: } ! 229: if(pverb==1 && iverb == i+1){ ! 230: sent[sav].cc=SUBCONJ; ! 231: ce=','; ! 232: continue; ! 233: } ! 234: switch(sent[i+1].cc){ ! 235: case UNK: ! 236: case NV_PL: ! 237: case NOUN_VERB: ! 238: case ED: ! 239: sent[sav].cc=SUBCONJ; ! 240: verb=0; ! 241: ce=','; ! 242: continue; ! 243: default: ! 244: sent[sav].cc=PREP; ! 245: subty = savsub; ! 246: continue; ! 247: } ! 248: case TO: ! 249: sent[i++].cc=VERB; ! 250: switch(nextc){ ! 251: case UNK: ! 252: case AUXS: ! 253: case VERB_ADJ: ! 254: case NOUN_VERB: ! 255: case ED: ! 256: case VERB: ! 257: sent[i].cc=VERB; ! 258: continue; ! 259: case HAVE: ! 260: sent[i].cc = VERB; ! 261: if(sent[i+1].cc == ED){ ! 262: sent[++i].cc = VERB; ! 263: continue; ! 264: } ! 265: if(sent[i+1].cc != BE)continue; ! 266: i++; ! 267: case BE: ! 268: sent[i].cc=VERB; ! 269: if(sent[i+1].cc == ED || sent[i+1].cc == ING){ ! 270: sent[++i].cc = VERB; ! 271: } ! 272: else if(sent[i+1].cc == UNK){ ! 273: sent[++i].cc = ADJ; ! 274: } ! 275: continue; ! 276: default: ! 277: sent[i-1].cc = PREP; ! 278: prep=1; ! 279: i=getnoun(i,ce); ! 280: prep=0; ! 281: continue; ! 282: } ! 283: case NV_PL: ! 284: if(subty==0){ ! 285: i=getnoun(i,ce); ! 286: subty=PLURAL; ! 287: } ! 288: else if(verb== 0){ /*need verb*/ ! 289: sent[i].cc=VERB; ! 290: verb=1; ! 291: } ! 292: else{ ! 293: i=getnoun(i,ce); ! 294: } ! 295: continue; ! 296: case UNK: ! 297: case NOUN_VERB: ! 298: if(verb==1){ ! 299: if(be==1 && nextc != WHO){ ! 300: sent[i].cc=ADJ; ! 301: continue; ! 302: } ! 303: i=getnoun(i,ce); ! 304: } ! 305: else if(nextc==NV_PL &&( sent[i+2].cc==NOUN_VERB || sent[i+2].cc==NOUN|| ! 306: sent[i+2].cc==UNK || sent[i+2].cc==NV_PL)){ ! 307: sent[i].cc=NOUN; ! 308: if(sent[i-1].cc == NOUN){ ! 309: sent[i-1].cc = ADJ; ! 310: } ! 311: subty=SING; ! 312: continue; ! 313: } ! 314: else if(subty==0){ ! 315: i=getnoun(i,ce); ! 316: continue; ! 317: } ! 318: else { /* desparation */ ! 319: sent[i].cc=VERB; ! 320: verb=1; ! 321: } ! 322: continue; ! 323: case ED: ! 324: if(verb == 0){ ! 325: sent[i].cc=VERB; ! 326: verb=1; ! 327: } ! 328: else if(sent[i-1].cc == BE){ ! 329: sent[i].cc = VERB; ! 330: } ! 331: else{ ! 332: i=getnoun(i,ce); ! 333: } ! 334: continue; ! 335: default: printf("got a %c on %s\n",sent[i].cc,sent[i].sp); ! 336: } ! 337: } ! 338: sdone: ! 339: if(sent[i].cc==END && sent[i].ic != ';')return(-1); ! 340: else { ! 341: if(sent[i].ic == ';')sent[i].cc=';'; ! 342: else comma--; ! 343: return(i); ! 344: } ! 345: } ! 346: getv(si,ce) ! 347: int si; ! 348: char ce; ! 349: { ! 350: int conj; ! 351: char c; ! 352: int ik; ! 353: must=0; ! 354: bflg=0; ! 355: hflg=0; ! 356: verbty=0; ! 357: for(j=si;((c=sent[j].cc) != ce) && (c != END); j++){ ! 358: iverb=j; ! 359: switch(c){ ! 360: case ED: ! 361: continue; ! 362: case HAS: ! 363: hflg=1; ! 364: verbty=SING; ! 365: sent[j].cc=AUXX; ! 366: goto next; ! 367: case HAVE: ! 368: if(sent[j-1].cc==TO){ ! 369: continue; ! 370: } ! 371: case HAD: ! 372: hflg=1; ! 373: verbty=PLURAL; ! 374: sent[j].cc=AUXX; ! 375: goto next; ! 376: case BE: ! 377: if(sent[j].ic != BE){ ! 378: return(1); ! 379: } ! 380: continue; ! 381: case VERB: ! 382: if(sent[j-1].cc==TO){ ! 383: continue; ! 384: } ! 385: return(1); ! 386: case AUXX: ! 387: return(1); ! 388: case AUXP: ! 389: must=1; ! 390: verbty=PLURAL; ! 391: sent[j].cc=AUXX; ! 392: goto next; ! 393: case AUXS: ! 394: if(sent[j-1].cc==TO){ ! 395: continue; ! 396: } ! 397: verbty=SING; ! 398: sent[j].cc=AUXX; ! 399: goto next; ! 400: case AUX: ! 401: case AUXV: ! 402: must=1; ! 403: sent[j].cc=AUXX; ! 404: next: ! 405: if(sent[j-1].cc == CONJ && verb == 0)conj = 0; ! 406: else conj = 1; ! 407: if(question==1){ ! 408: j=getnoun(j+1,ce); ! 409: question=0; ! 410: } ! 411: getv2(ce); ! 412: if(sent[j].cc == AUXX){ ! 413: sent[j].cc = VERB; ! 414: } ! 415: if((sent[j].cc!=VERB && sent[j].cc!=BE) && sent[iverb].cc==AUXX){ ! 416: sent[iverb].cc=VERB; ! 417: for(ik=iverb+1;ik<=j;ik++)sent[ik].cc=sent[ik].ic; ! 418: } ! 419: return(conj); ! 420: case BES: ! 421: verbty=SING; ! 422: bflg=1; ! 423: sent[j].cc=BE; ! 424: goto next; ! 425: case BEP: ! 426: verbty=PLURAL; ! 427: bflg=1; ! 428: sent[j].cc=BE; ! 429: goto next; ! 430: case SUBCONJ: ! 431: if(sent[j-1].cc== ',' && sent[j+1].cc == ','){ ! 432: continue; ! 433: } ! 434: case THAT: ! 435: case WHO: ! 436: goto vdone; ! 437: case ',': if(comma==1 && sent[j+1].cc==CONJ){ ! 438: goto vdone; ! 439: } ! 440: } ! 441: } ! 442: vdone: ! 443: return(0); ! 444: } ! 445: getv2(ce) ! 446: char ce; ! 447: { ! 448: int vflg; ! 449: char c; ! 450: vflg=0; ! 451: while(((c=sent[++j].cc) != ce) && (c != END)){ ! 452: switch(c){ ! 453: case NOUN_ADV: ! 454: case ADJ_ADV: ! 455: if(bflg == 0 || sent[j+1].cc == ED || sent[j+1].cc == ING){ ! 456: sent[j].cc = ADV; ! 457: } ! 458: else{ ! 459: j -= 1; ! 460: return; ! 461: } ! 462: case ADV: ! 463: continue; ! 464: case SUBCONJ: ! 465: if(sent[j+1].cc == ED || sent[j+1].cc == ING || sent[j+1].cc == ADV || ! 466: sent[j+1].cc == ADJ_ADV)sent[j].cc = ADV; ! 467: else return; ! 468: continue; ! 469: case VERB: ! 470: return; ! 471: case VERB_ADJ: ! 472: case ED: ! 473: sent[j].cc=VERB; ! 474: return; ! 475: case BE: ! 476: must=0; ! 477: bflg=1; ! 478: continue; ! 479: case ING: ! 480: if(bflg == 1){ ! 481: sent[j].cc = VERB; ! 482: } ! 483: else { ! 484: j -= 1; ! 485: } ! 486: return; ! 487: case NOUN_VERB: ! 488: case UNK: ! 489: if(bflg==1 || vflg==1 || hflg==1){ ! 490: j -= 1; ! 491: return; ! 492: } ! 493: sent[j].cc=VERB; ! 494: return; ! 495: case PRONP_ADJ: ! 496: case PRONS_ADJ: ! 497: c=sent[j+1].cc; ! 498: if(c==ED||c==ING||c==BE||must==1){ ! 499: sent[j].cc = ADV; ! 500: } ! 501: else{ ! 502: j -= 1; ! 503: return; ! 504: } ! 505: continue; ! 506: case AUXV: ! 507: case AUX: ! 508: case AUXP: ! 509: case AUXS: ! 510: case HAD: ! 511: case HAVE: ! 512: case HAS: ! 513: must=0; ! 514: vflg=1; ! 515: sent[j].cc=AUXX; ! 516: continue; ! 517: default: ! 518: j -= 1; ! 519: return; ! 520: } ! 521: } ! 522: j -= 1; ! 523: } ! 524: getnoun(k,ce) ! 525: int k,ce; ! 526: { ! 527: char c; ! 528: int st,t,nextst; ! 529: int rep; ! 530: int t1,tt; ! 531: st=k; ! 532: rep=0; ! 533: b: ! 534: nextst=sent[st+1].cc; ! 535: switch(sent[st].cc){ ! 536: case END: ! 537: done=1; ! 538: break; ! 539: case ',': ! 540: if(ce==','){ ! 541: done=1; ! 542: break; ! 543: } ! 544: else { ! 545: goto getdef; ! 546: } ! 547: case '"': ! 548: if(aflg == 1){ ! 549: st++; ! 550: goto b; ! 551: } ! 552: break; ! 553: case NOUN: ! 554: switch(nextst){ ! 555: case UNK: ! 556: case NOUN_VERB: ! 557: if(verb==1){ ! 558: goto nn; ! 559: } ! 560: if(subty != PLURAL){ ! 561: goto nn; ! 562: } ! 563: break; ! 564: case NV_PL: ! 565: if(verb==1){ ! 566: goto nn; ! 567: } ! 568: if(subty == PLURAL){ ! 569: goto nn; ! 570: } ! 571: break; ! 572: case NOUN_ADJ: ! 573: case POS: ! 574: case NOUN: ! 575: nn: ! 576: sent[st].cc=ADJ; ! 577: goto b; ! 578: } ! 579: if(prep==0)subty=SING; ! 580: break; ! 581: case ADV: ! 582: st++; ! 583: goto b; ! 584: case WHO: ! 585: st=who(st,ce); ! 586: st++; ! 587: goto b; ! 588: case ADJ_ADV: ! 589: case VERB_ADJ: ! 590: case ED: ! 591: sent[st++].cc=ADJ; ! 592: goto b; ! 593: case ING: ! 594: if(nextst==UNK || nextst==NOUN_VERB || nextst==NOUN || nextst==NV_PL){ ! 595: sent[st++].cc=ADJ; ! 596: goto b; ! 597: } ! 598: sent[st].cc=NOUN; ! 599: if(prep==0)subty=SING; ! 600: break; ! 601: case ART: ! 602: case POS: ! 603: if(st != k){ ! 604: goto getdef; ! 605: } ! 606: case ADJ: ! 607: st++; ! 608: goto b; ! 609: case PRONP: ! 610: if(prep==0)subty=PLURAL; ! 611: ! 612: break; ! 613: case PRONS: ! 614: if(prep==0)subty=SING; ! 615: break; ! 616: case NOUN_VERB: ! 617: if(nextst==NOUN||(verb==1 && (nextst== NV_PL|| nextst==NOUN_VERB) )){ ! 618: sent[st].cc=ADJ; ! 619: goto b; ! 620: } ! 621: case NV_PL: ! 622: sent[st].cc=NOUN; ! 623: if(prep==0){ ! 624: if(sent[st].ic==NV_PL)subty=PLURAL; ! 625: else subty=SING; ! 626: } ! 627: if(sent[st-1].cc == NOUN && sent[st-1].ic == NOUN){ ! 628: sent[st-1].cc = ADJ; ! 629: } ! 630: break; ! 631: case PRONP_ADJ: ! 632: switch(nextst){ ! 633: case NOUN_ADJ: ! 634: case NV_PL: ! 635: case ADJ_ADV: ! 636: case PRONS_ADJ: ! 637: case ADJ: ! 638: case ING: ! 639: sent[st++].cc=ADJ; ! 640: goto b; ! 641: case NOUN_VERB: ! 642: case UNK: ! 643: case ED: ! 644: if(verb == 0){ ! 645: goto def; ! 646: } ! 647: else{ ! 648: sent[st++].cc=ADJ; ! 649: goto b; ! 650: } ! 651: case NOUN: ! 652: sent[st++].cc=ADJ; ! 653: if(prep==0)subty=SING; ! 654: break; ! 655: case SUBCONJ: sent[st++].cc=PRONP; /* more than .. */ ! 656: sent[st++].cc=CONJ; ! 657: if(verb==0)verb=getv(st,ce); ! 658: goto b; ! 659: case '"': ! 660: sent[st++].cc = ADJ; ! 661: st++; ! 662: goto b; ! 663: default: ! 664: def: ! 665: sent[st].cc=PRONP; ! 666: if(prep==0)subty=PLURAL; ! 667: ! 668: break; ! 669: } ! 670: break; ! 671: case PRONS_ADJ: ! 672: if(aflg == 1 && nextst != END && nextst != ART){ ! 673: sent[st++].cc=ADJ; ! 674: goto b; ! 675: } ! 676: switch(nextst){ ! 677: case '"': ! 678: sent[st++].cc = ADJ; ! 679: st++; ! 680: goto b; ! 681: case ING: ! 682: case UNK: ! 683: case NOUN_VERB: ! 684: case NOUN_ADJ: ! 685: case ADJ_ADV: ! 686: case ADJ: ! 687: sent[st++].cc=ADJ; ! 688: goto b; ! 689: case NOUN: ! 690: sent[st++].cc=ADJ; ! 691: if(prep==0)subty=SING; ! 692: break; ! 693: case PRONS_ADJ: ! 694: sent[st++].cc=ADJ; ! 695: sent[st].cc=PRONP; ! 696: if(prep==0)subty=SING; ! 697: break; ! 698: case NV_PL: ! 699: if(verb==1){ ! 700: sent[st++].cc=ADJ; ! 701: sent[st].cc=NOUN; ! 702: if(prep==0)subty=PLURAL; ! 703: ! 704: break; ! 705: } ! 706: sent[st].cc=PRONP; ! 707: if(prep==0)subty=SING; ! 708: break; ! 709: default: ! 710: sent[st].cc=PRONP; ! 711: if(prep==0)subty=SING; ! 712: ! 713: break; ! 714: } ! 715: break; ! 716: case NOUN_ADJ: ! 717: if(nextst==NOUN||nextst==ADJ||nextst == NOUN_ADJ||nextst==PRONS_ADJ||nextst==PRONP_ADJ){ ! 718: sent[st++].cc=ADJ; ! 719: goto b; ! 720: } ! 721: if(nextst!=UNK && nextst != NOUN_VERB && nextst != NV_PL){ ! 722: sent[st].cc=NOUN; ! 723: if(prep==0)subty=SING; ! 724: break; ! 725: } ! 726: if(verb==1 || sent[st+2].cc==ED){ ! 727: sent[st++].cc=ADJ; ! 728: goto b; ! 729: } ! 730: sent[st].cc=NOUN; ! 731: if(prep==0)subty=SING; ! 732: break; ! 733: case UNK: ! 734: if(nextst != UNK){ ! 735: if(nextst == ',' && rep==0){ ! 736: c=sent[st+2].cc; ! 737: if((c==UNK||c==ADJ||c==NOUN_ADJ||c==ING) && (sent[st+3].cc==UNK||sent[st+3].cc==NOUN_VERB ! 738: || sent[st+3].cc==NV_PL)){ ! 739: comma--; ! 740: sent[st].cc=ADJ; ! 741: sent[st+2].cc=ADJ; ! 742: sent[st+3].cc=NOUN; ! 743: if(prep==0){ ! 744: if(sent[st+3].ic==NV_PL)subty=PLURAL; ! 745: else subty=SING; ! 746: } ! 747: return(st+3); ! 748: } ! 749: else { ! 750: sent[st].cc=NOUN; ! 751: if(prep==0)subty=SING; ! 752: break; ! 753: } ! 754: } ! 755: if(nextst==NOUN||nextst==ING ||nextst==NOUN_ADJ|| sent[st-1].cc==ADV ! 756: || nextst==ADJ){ ! 757: sent[st++].cc=ADJ; ! 758: goto b; ! 759: } ! 760: if((nextst==NV_PL || nextst==NOUN_VERB) &&(verb==1 ||(verb==0 && (sent[st+2].cc==UNK ! 761: || sent[st+2].cc==NOUN_VERB || sent[st+2].cc==ED||sent[st+2].cc==VERB_ADJ)))){ ! 762: sent[st++].cc=ADJ; ! 763: sent[st].cc=NOUN; ! 764: if(prep == 0)subty=PLURAL; ! 765: break; ! 766: } ! 767: if(nextst==CONJ &&(sent[st+2].cc==ADJ||sent[st+2].cc==ADJ_ADV)){ ! 768: sent[st].cc=ADJ; ! 769: goto b; ! 770: } ! 771: sent[st].cc=NOUN; ! 772: if(prep==0)subty=SING; ! 773: ! 774: break; ! 775: } ! 776: for(t=st+1;sent[t].cc== UNK;t++); ! 777: if(verb==0 && prep == 0){ /* UUU. */ ! 778: if(prep==0)subty=SING; ! 779: if(sent[t].cc==NV_PL){ /* UUZ.*/ ! 780: if(sent[t+1].cc==UNK || sent[t+1].cc==NOUN_VERB){ /* UUZU */ ! 781: sent[t+1].cc=VERB; ! 782: verb=1; ! 783: sent[t].cc=NOUN; ! 784: t1=t; ! 785: } ! 786: else{ /* UUZ. */ ! 787: sent[t].cc=VERB; ! 788: verb=1; ! 789: sent[t-1].cc=NOUN; ! 790: t1=t-1; ! 791: } ! 792: } ! 793: else{ /* UU. */ ! 794: if(sent[t].cc!= ED){ ! 795: sent[t-1].cc=VERB; ! 796: verb=1; ! 797: sent[t-2].cc=NOUN; ! 798: t1=t-2; ! 799: t--; ! 800: } ! 801: else { ! 802: sent[--t].cc=NOUN; ! 803: t1=t; ! 804: } ! 805: } ! 806: } ! 807: else{ ! 808: if(sent[t].cc==NOUN_VERB|| sent[t].cc==NOUN|| sent[t].cc==NV_PL){ ! 809: sent[t].cc=NOUN; ! 810: if(prep==0)subty=PLURAL; ! 811: t1=t; ! 812: } ! 813: else{ ! 814: sent[--t].cc=NOUN; ! 815: if(prep==0)subty=SING; ! 816: t1=t; ! 817: } ! 818: } ! 819: for(tt=st;tt<t1;tt++)sent[tt].cc=ADJ; ! 820: st=t; ! 821: break; ! 822: } ! 823: getdef: ! 824: if(sent[st].cc == CONJ && sent[st-1].cc == ADJ){ ! 825: st++; ! 826: goto b; ! 827: } ! 828: if(sent[st-1].cc==PREP && ( sent[st].cc == THAT || sent[st].cc == SUBCONJ)){ ! 829: prep=0; ! 830: return(--st); ! 831: } ! 832: if(sent[st].cc != NOUN && sent[st].cc != PRONP && sent[st].cc != PRONS){ ! 833: st--; ! 834: if(sent[st].cc==ADJ && sent[st].ic==ING){ ! 835: sent[st].cc=NOUN; ! 836: if(prep==0)subty=SING; ! 837: } ! 838: else if(sent[st].cc == PREP){ ! 839: sent[st].cc = ADV; ! 840: } ! 841: prep=0; ! 842: return(st); ! 843: } ! 844: if(done==1){ ! 845: prep=0; ! 846: return(st); ! 847: } ! 848: if(sent[st+1].cc== ','){ ! 849: if(sent[st+2].cc==CONJ){ ! 850: if(rep==0){ ! 851: prep=0; ! 852: return(st); ! 853: } ! 854: else{ ! 855: st+=3; ! 856: comma--; ! 857: if(prep==0)subty=PLURAL; ! 858: prep=1; ! 859: goto b; ! 860: } ! 861: } ! 862: if(comma==1){ ! 863: prep=0; ! 864: return(st); ! 865: } ! 866: ! 867: switch(sent[st+2].cc){ ! 868: case PREP: ! 869: case SUBCONJ: ! 870: prep=0; ! 871: return(st); ! 872: default: rep++; ! 873: comma--; ! 874: st+=2; ! 875: if(prep==0)subty=PLURAL; ! 876: prep=1; ! 877: goto b; ! 878: } ! 879: } ! 880: if(sent[st+1].cc==CONJ && sent[st+2].cc != ED){ ! 881: st+=2; ! 882: if(prep==0)subty=PLURAL; ! 883: prep=1; ! 884: goto b; ! 885: } ! 886: prep=0; ! 887: return(st); ! 888: } ! 889: who(kk,ce) ! 890: int kk,ce; ! 891: { ! 892: char c; ! 893: sent[kk].cc=PRONP; ! 894: c=sent[kk+1].cc; ! 895: while(c==ADV||c==ADJ_ADV){ ! 896: sent[++kk].cc = ADV; ! 897: c = sent[kk+1].cc; ! 898: } ! 899: if(c==UNK||c==NOUN_VERB||c==VERB_ADJ||c==ED|| c==NV_PL){ ! 900: sent[++kk].cc=VERB; ! 901: if(verb == 0)verb = getv(kk+1,ce); ! 902: return(kk); ! 903: } ! 904: w: switch(sent[++kk].cc){ ! 905: case AUXX: ! 906: case ADV: ! 907: case BE: ! 908: case VERB: ! 909: goto w; ! 910: default: ! 911: verb=getv(kk,ce); ! 912: return(--kk); ! 913: } ! 914: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.