Annotation of researchv10dc/cmd/style/nwords.l, revision 1.1

1.1     ! root        1: %{
        !             2: /* break out words, output cap + word(inverted) */
        !             3: #include <stdio.h>
        !             4: #include <ctype.h>
        !             5: #define OUT()  for(i=yyleng-1;i>=0; i--)putchar(yytext[i]); putchar('\n')
        !             6: #define OUT1(nam)      printf("%c:%s\n",nam,yytext)
        !             7: #define OUTN(string)   printf("%s\n",string)
        !             8: #include "names.h"
        !             9: #include "nhash.c"
        !            10: #include "dict.c"
        !            11: #include "ydict.c"
        !            12: #include "abbrev.c"
        !            13: char nt[]  = "D:n't";
        !            14: char qs[]  = "c:'s";
        !            15: char fin[]  = "E:.";
        !            16: int NOCAPS = 0;                /* if set all caps are turned to lower case */
        !            17: int i,j;
        !            18: int dot = 0;
        !            19: int first  = 1;
        !            20: int qflg,nflg;
        !            21: int cap  = 0;
        !            22: %}
        !            23: %p 3000
        !            24: %a 3300
        !            25: %o 4500
        !            26: 
        !            27: L      [a-z]
        !            28: N      [0-9]
        !            29: C      [A-Z]
        !            30: A      [a-zA-Z]
        !            31: P      [a-zA-Z0-9]
        !            32: 
        !            33: %%
        !            34: ^[.!].+[\n]    {
        !            35:        if(dot){
        !            36:                OUTN(fin);
        !            37:                dot = 0;
        !            38:                first = 1;
        !            39:        }
        !            40:        printf(":%s",yytext);
        !            41:        }
        !            42: May    {
        !            43:                if(first == 0){
        !            44:                        OUT1(NOUN);
        !            45:                }
        !            46:                else {
        !            47:                        first = 0;
        !            48:                        yytext[0] = tolower(yytext[0]);
        !            49:                        cap = 1;
        !            50:                        goto wd;
        !            51:                }
        !            52:        }
        !            53: "U.S."         {
        !            54:                OUT1(NOUN);
        !            55:                }
        !            56: {C}{L}*'[s]    {
        !            57:                pos(1);
        !            58:                if(first==1)first=0;
        !            59:                }
        !            60: {C}+['][s]     {
        !            61:                if(NOCAPS)
        !            62:                        for(i=0;i<yyleng;i++)
        !            63:                                if(isupper(yytext[i]))yytext[i] = tolower(yytext[i]);
        !            64:                OUT1(POS);
        !            65:                }
        !            66: {P}+([-]{P}+)+ {
        !            67:                if(NOCAPS)
        !            68:                        for(i=0;i<yyleng;i++)
        !            69:                                if(isupper(yytext[i]))yytext[i] = tolower(yytext[i]);
        !            70:                OUT1(NOUN_ADJ);
        !            71:                }
        !            72: {C}{C}+        {
        !            73:                if(NOCAPS)
        !            74:                        for(i=0;i<yyleng;i++)
        !            75:                                yytext[i] = tolower(yytext[i]);
        !            76:                if((i=input()) == 's'){
        !            77:                        yytext[yyleng++] = 's';
        !            78:                        yytext[yyleng] = '\0';
        !            79:                        OUT1(PNOUN);
        !            80:                }
        !            81:                else if(i == '&'){
        !            82:                        yytext[yyleng++] = i;
        !            83:                        if(isupper(i=input())){
        !            84:                                yytext[yyleng++] = i;
        !            85:                                while(isupper(i=input()))
        !            86:                                        yytext[yyleng++] = i;
        !            87:                        }
        !            88:                        yytext[yyleng] = '\0';
        !            89:                        unput(i);
        !            90:                        OUT1(NOUN);
        !            91:                }
        !            92:                else {
        !            93:                        unput(i);
        !            94:                        if(!NOCAPS)
        !            95:                                for(i=0;i<yyleng;i++)yytext[i] = tolower(yytext[i]);
        !            96:                                goto wd;
        !            97:                }
        !            98:                }
        !            99: [LD][']{C}{L}* {
        !           100:                if(NOCAPS){
        !           101:                        yytext[0] = tolower(yytext[0]);
        !           102:                        yytext[2] = tolower(yytext[2]);
        !           103:                }
        !           104:                OUT1(NOUN_ADJ);
        !           105:                }
        !           106: {C}{L}*        {
        !           107:                if(first==1)
        !           108:                        first=0;
        !           109:                else cap = 1;
        !           110:                if(yyleng==1 && yytext[0] == 'I'){
        !           111:                        cap = 0;
        !           112:                        goto wd;
        !           113:                }
        !           114:                yytext[0] = tolower(yytext[0]);
        !           115:                goto wd;
        !           116:        }
        !           117: {N}":"{N}{N}   {
        !           118:                OUT1(NOUN_ADJ);
        !           119:                }
        !           120: ({N}*[,])*({N}+".")+[ \t\n]+{C}        {
        !           121:                for(i=yyleng-1;i>0;i--)
        !           122:                        if(yytext[i] == '.')break;
        !           123:                unput(yytext[yyleng-1]);
        !           124:                yytext[i] = '\0';
        !           125:                OUT1(NOUN_ADJ);
        !           126:                OUTN(fin);
        !           127:                first = 1;
        !           128:        }
        !           129: ([hH]e"/"[sS]he)|([sS]he"/"[hH]e)              {
        !           130:        if(NOCAPS)
        !           131:                if(isupper(yytext[0]))yytext[0] = tolower(yytext[0]);
        !           132:        OUT1(PRONS);
        !           133:        }
        !           134: ([hH]is"/"[hH]er)|([hH]er"/"[hH]is)    {
        !           135:        if(NOCAPS)
        !           136:                if(isupper(yytext[0]))yytext[0] = tolower(yytext[0]);
        !           137:        OUT1(POS);
        !           138:        }
        !           139: [ \t`]*[a-zA-Z0-9.]*("\/"[a-zA-Z0-9.]+)+[']*   {
        !           140:                if(yytext[yyleng-1] == '.'){
        !           141:                        if(ahead() == 0)dot=1;
        !           142:                }
        !           143:                if(NOCAPS)
        !           144:                        for(i=0;i<yyleng;i++)
        !           145:                                if(isupper(yytext[i]))yytext[i] = tolower(yytext[i]);
        !           146:                OUT1(NOUN_ADJ);
        !           147:                }
        !           148: {N}+([,]{N}+)*("."{N}+)*[']*[s]*       {
        !           149:        OUT1(NOUN_ADJ);
        !           150:        }
        !           151: {N}*([,]{N}+)*("."{N}+)+[']*[s]*       {
        !           152:        OUT1(NOUN_ADJ);
        !           153:        }
        !           154: {N}+([,]{N}+)*("."{N}*)*[']*[s]*       {
        !           155:        if(yytext[yyleng-1] == '.')dot=1;
        !           156:        OUT1(NOUN_ADJ);
        !           157:        }
        !           158: ({A}*{N}+{A}*)+        {
        !           159:        if(input() == '.')
        !           160:                ahead();
        !           161:        if(NOCAPS)
        !           162:                for(i=0;i<yyleng;i++)
        !           163:                        if(isupper(yytext[i]))yytext[i]=tolower(yytext[i]);
        !           164:        OUT1(NOUN_ADJ);
        !           165:        }
        !           166: {N}+[%]                {
        !           167:                OUT1(NOUN_ADJ);
        !           168:                }
        !           169: "$"{N}+([,]{N}+)*("."{N}*)*    {
        !           170:                if(yytext[yyleng-1] == '.')dot=1;
        !           171:                OUT1(NOUN);
        !           172:                }
        !           173: [Aa]"."[ ]*[Mm]"."     {
        !           174:                OUT1(ADJ_ADV);
        !           175:                }
        !           176: [Pp]"."[ ]*[Mm]"."     {
        !           177:                OUT1(ADJ_ADV);
        !           178:                }
        !           179: "a."[ ]*"d."   {
        !           180:                OUT1(ADJ_ADV);
        !           181:                }
        !           182: "b."[ ]*"c."   {
        !           183:                OUT1(ADJ_ADV);
        !           184:                }
        !           185: "i."[ ]*"e."   {
        !           186:                OUT1(PREP);
        !           187:                }
        !           188: "e."[ ]*"g."   {
        !           189:                OUT1(PREP);
        !           190:                }
        !           191: "etc."[ \n]*[,)]*      {
        !           192:                i = yytext[4];
        !           193:                yytext[4] = '\0';
        !           194:                OUT1(NOUN);
        !           195:                yytext[4] = i;
        !           196:                yytext[0] = yytext[yyleng-1];
        !           197:                yytext[1] = '\0';
        !           198:                if(yytext[0] == ',' || yytext[0] == ')')
        !           199:                        OUT1(',');
        !           200:                else {
        !           201:                        OUTN(fin);
        !           202:                        first = 1;
        !           203:                }
        !           204:        }
        !           205: "et al."       {
        !           206:                OUT1(NOUN);
        !           207:                }
        !           208: in"."[ \n]*{C} {
        !           209:                unput(yytext[yyleng-1]);
        !           210:                yytext[2] = '\0';
        !           211:                OUT1(PREP);
        !           212:                OUTN(fin);
        !           213:                first = 1;
        !           214:                }
        !           215: Ph"."[ ]*[Dd]"."       {
        !           216:                OUT1(ADJ);
        !           217:                }
        !           218: [A-Z]"."       {
        !           219:                dot=1;
        !           220:                OUT1(NOUN);
        !           221:                }
        !           222: can't          {
        !           223:                yytext[3]='\0';
        !           224:                yyleng -= 2;
        !           225:                nflg=1;
        !           226:                goto wd;
        !           227:                }
        !           228: won't          {
        !           229:                OUT1('X');
        !           230:                }
        !           231: ain't          {
        !           232:                OUT1('g');
        !           233:                }
        !           234: [A-Z]*{L}+n't  {
        !           235:                if(isupper(yytext[0]))
        !           236:                        yytext[0] = tolower(yytext[0]);
        !           237:                nflg=1;
        !           238:                yytext[yyleng-3]='\0';
        !           239:                yyleng -= 3;
        !           240:                goto wd;
        !           241:                }
        !           242: o'clock                {
        !           243:                OUT1(ADV);
        !           244:        }
        !           245: {L}+'[s]       {
        !           246:                pos(0);
        !           247:                }
        !           248: 'll    {
        !           249:                OUT1(lookup("will",1,0));
        !           250:        }
        !           251: 've    {
        !           252:                OUT1(lookup("have",1,0));
        !           253:        }
        !           254: 're    {
        !           255:                OUT1(lookup("are",1,0));
        !           256:        }
        !           257: 'd     {
        !           258:                OUT1(lookup("had",1,0));
        !           259:        }
        !           260: 'm     {
        !           261:                OUT1(lookup("am",1,0));
        !           262:        }
        !           263: 'ld    {
        !           264:                OUT1(lookup("would",1,0));
        !           265:        }
        !           266: {L}+   {
        !           267: wd:
        !           268:        if((j = lookup(yytext,1,0)) != 0){
        !           269:                first=0;
        !           270:                if(cap){
        !           271:                        if(!NOCAPS)
        !           272:                                yytext[0] = toupper(yytext[0]);
        !           273:                        cap = 0;
        !           274:                        if(dot)OUTN(fin);
        !           275:                }
        !           276:                dot=0;
        !           277:                OUT1(j);
        !           278:                if(nflg==1){
        !           279:                        nflg=0;
        !           280:                        OUTN(nt);
        !           281:                }
        !           282:        }
        !           283:        else{
        !           284:                first = dot=0;
        !           285:                if(yytext[yyleng-1] == 'y' && cap == 0){
        !           286:                        switch(yytext[yyleng-2]){
        !           287:                        case 'c': look(cy,yyleng-2,NOUN);
        !           288:                                        break;
        !           289:                        case 'f': look(fy,yyleng-2,VERB);
        !           290:                                        break;
        !           291:                        case 'l': look(ly,yyleng-2,ADV);
        !           292:                                        break;
        !           293:                        case 'g': if(yytext[yyleng-3] == 'o'){
        !           294:                                        OUT1(NOUN);
        !           295:                                        break;
        !           296:                                }
        !           297:                                look(gy,yyleng-2,ADJ);
        !           298:                                break;
        !           299:                        case 'r':       switch(yytext[yyleng-3]){
        !           300:                                case 'a': look(ary,yyleng-3,ADJ);
        !           301:                                                break;
        !           302:                                case 'o': look(ory,yyleng-3,ADJ);
        !           303:                                                break;
        !           304:                                case 'e': look(ery,yyleng-3,NOUN);
        !           305:                                                break;
        !           306:                                default: look(ry,yyleng-2,NOUN);
        !           307:                                }
        !           308:                                break;
        !           309:                        case 't': if(yytext[yyleng-3] == 'i')look(ity,yyleng-3,NOUN);
        !           310:                                else look(ty,yyleng-2,ADJ);
        !           311:                                break;
        !           312:                        default: OUT();
        !           313:                        }
        !           314:        }
        !           315:                else {
        !           316:                        if(cap){
        !           317:                                if(!NOCAPS)yytext[0] = toupper(yytext[0]);
        !           318:                                cap = 0;
        !           319:                                OUT1(NOUN_ADJ);
        !           320:                        }
        !           321:                        else {
        !           322:                                OUT();
        !           323:                        }
        !           324:                }
        !           325:        }
        !           326:        }
        !           327: [\n]   ;
        !           328: [ ]+   ;
        !           329: [\t]+  ;
        !           330: ";"    {
        !           331:        OUT1(';');
        !           332:        first=1;
        !           333:        }
        !           334: (\"|`|')+      {
        !           335:        if(dot){
        !           336:                OUTN(fin);
        !           337:                dot=0;
        !           338:        }
        !           339:        if(qflg==1){
        !           340:                qflg=0;
        !           341:                OUT1('"');
        !           342:        }
        !           343:        else {
        !           344:                qflg=1;
        !           345:                first=1;
        !           346:                OUT1('"');
        !           347:        }
        !           348:        }
        !           349: ".\""  {
        !           350:        qflg=0;
        !           351:        first=1;
        !           352:        OUT1(END);
        !           353:        }
        !           354: "..."  {
        !           355:        OUT1(',');
        !           356:        }
        !           357: "~."   {
        !           358:        first = 1;
        !           359:        OUT1(END);
        !           360:        }
        !           361: {A}{A}+"."     {
        !           362:                yytext[yyleng-1] = '\0';
        !           363:                if((j=abbrev(yytext,1,0)) != 0){
        !           364:                        if(isupper(yytext[0])){
        !           365:                                if(NOCAPS)yytext[0] = tolower(yytext[0]);
        !           366:                                if(first == 1)first=0;
        !           367:                        }
        !           368:                        yytext[yyleng-1] = '.';
        !           369:                        OUT1(j);
        !           370:                }
        !           371:                else {
        !           372:                        j = ahead();
        !           373:                        if(j == 0)
        !           374:                                yyleng--;
        !           375:                        for(i=0;i<yyleng;i++)
        !           376:                                if(isupper(yytext[i])){
        !           377:                                        yytext[i] = tolower(yytext[i]);
        !           378:                                        if(i == 0)cap = 1;
        !           379:                                        else cap = 0;
        !           380:                                }
        !           381:                        if(j == 0)goto wd;
        !           382:                        if(cap)
        !           383:                                if(!NOCAPS)yytext[0] = toupper(yytext[0]);
        !           384:                        OUT1(NOUN_ADJ);
        !           385:                }
        !           386:        }
        !           387: "."    {
        !           388:        first=1;
        !           389:        OUT1(END);
        !           390:        }
        !           391: "!\""  {
        !           392:        qflg=0;
        !           393:        first=1;
        !           394:        OUT1(END);
        !           395:        }
        !           396: "!"    {
        !           397:        first=1;
        !           398:        OUT1(END);
        !           399:        }
        !           400: "?\""  {
        !           401:        qflg=0;
        !           402:        first=1;
        !           403:        OUT1(END);
        !           404:        }
        !           405: "?"    {
        !           406:        first=1;
        !           407:        OUT1(END);
        !           408:        }
        !           409: ":"    {
        !           410:        OUT1(',');
        !           411:        first=1;
        !           412:        }
        !           413: [-]+   {
        !           414:        OUT1(',');
        !           415:        first=1;
        !           416:        }
        !           417: ","    {
        !           418:        OUT1(',');
        !           419:        }
        !           420: (\[|\(|\{|\]|\)|\})    {
        !           421:        OUT1(',');
        !           422:        }
        !           423: .      {
        !           424: /*     fprintf(stderr,"nwords funny char: %c\n",yytext[0])*/ ;
        !           425:        }
        !           426: %%
        !           427: look(f,n,cc)
        !           428: char (*f)();
        !           429: int n;
        !           430: char cc;
        !           431: {
        !           432:        int nn;
        !           433:        char  save;
        !           434:        save=yytext[n];
        !           435:        yytext[n] = '\0';
        !           436:        nn=(*f)(yytext,1,0);
        !           437:        yytext[n] = save;
        !           438:        if(nn != 0){
        !           439:                OUT1(nn);
        !           440:        }
        !           441:        else {
        !           442:                OUT1(cc);
        !           443:        }
        !           444: }
        !           445: pos(flg){
        !           446:        int ii,j;
        !           447:        if(flg == 1)yytext[0] = tolower(yytext[0]);
        !           448:        for(ii=yyleng-1;yytext[ii] != '\''; ii--);
        !           449:        yytext[ii] = '\0';
        !           450:        if((j=lookup(yytext,1,0)) != 0){
        !           451:                yyleng = ii;
        !           452:                OUT1(j);
        !           453:                OUTN(qs);
        !           454:        }
        !           455:        else{
        !           456:                if(flg==1 && !NOCAPS)yytext[0] = toupper(yytext[0]);
        !           457:                yytext[ii] = '\'';
        !           458:                OUT1(POS);
        !           459:        }
        !           460: }
        !           461: char   *filename="-";
        !           462: 
        !           463: main(argc,argv)
        !           464: int    argc;
        !           465: char   *argv[];
        !           466: {
        !           467:        register int rc=0;
        !           468:        putchar(':'); putchar('\n');
        !           469:        getd();
        !           470:        getab();
        !           471:        ygetd();
        !           472:        if(argc<=1) {
        !           473:                yylex();
        !           474:                OUTN(fin);
        !           475:        }else{
        !           476:                while(argc>1) {
        !           477:                        if(freopen(argv[1],"r",stdin)==NULL) {
        !           478:                                fprintf(stderr,"%s: cannot open\n", argv[1]);
        !           479:                                rc++;
        !           480:                        }else{
        !           481:                                filename=argv[1];
        !           482:                                yylex();
        !           483:                                OUTN(fin);
        !           484:                        }
        !           485:                        argc--; argv++;
        !           486:                }
        !           487:        }
        !           488:        return(rc);
        !           489: }
        !           490: ahead(){
        !           491:        register int c;
        !           492:        if(isalnum((c=input()))){
        !           493:                yytext[yyleng++] = '.';
        !           494:                while(!isspace((c=input() )))
        !           495:                        yytext[yyleng++] = c;
        !           496:                yytext[yyleng] = '\0';
        !           497:                unput(c);
        !           498:                return(1);
        !           499:        }
        !           500:        unput(c);
        !           501:        unput('.');
        !           502:        return(0);
        !           503: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.