Annotation of 43BSD/usr.bin/diction/end.l, revision 1.1.1.1

1.1       root        1: %{
                      2: #ifndef lint
                      3: static char sccsid[] = "@(#)end.l      4.2     (Berkeley)      82/11/06";
                      4: #endif not lint
                      5: 
                      6: #include <stdio.h>
                      7: #include <ctype.h>
                      8: #include "names.h"
                      9: #include "ehash.c"
                     10: #include "edict.c"
                     11: #define OUT1(c) putchar(c); putchar(':'); for(i=yyleng-1;i>=0;)putchar(yytext[i--])
                     12: #define POUT1(c) putchar(c); putchar(':'); for(i=yyleng-1;i>0;)putchar(yytext[i--])
                     13: int i;
                     14: int nomin = 0;
                     15: int NOCAPS = 0;                /*if set, all caps mapped to lower, plurals stripped*/
                     16: %}
                     17: 
                     18: C      [A-Z0-9a-z",;]
                     19: L      [a-zA-Z-]
                     20: 
                     21: %%
                     22: ^{C}:.+        {
                     23:        ECHO;
                     24:        }
                     25: ^ci.+  {
                     26:        look(ic,2,ADJ);
                     27:        }
                     28: ^de.+  {
                     29:        look(ed,2,ED);
                     30:        }
                     31: ^draw.+        {
                     32:        if(yytext[5] == 'E'){
                     33:                OUT1(NOUN_ADJ);
                     34:        }
                     35:        OUT1(ADJ_ADV);
                     36:        }
                     37: ^eca.+ {
                     38:        look(ace,3,NOUN_VERB);
                     39:        }
                     40: ^eci.+ {
                     41:        look(ice,3,NOUN_VERB);
                     42:        }
                     43: ^ecne.+        {
                     44:        if(look(ence,4,NOM))nomin++;
                     45:        }
                     46: ^ecna.+        {
                     47:        if(look(ance,4,NOM))nomin++;
                     48:        }
                     49: ^ee.+  {
                     50:        look(ee,2,NOUN);
                     51:        }
                     52: ^ega.+ {
                     53:        look(age,3,NOUN);
                     54:        }
                     55: ^elba.+        {
                     56:        look(able,4,ADJ);
                     57:        }
                     58: ^elbi.+        {
                     59:        look(ible,4,ADJ);
                     60:        }
                     61: ^elc.+ {
                     62:        look(cle,3,NOUN);
                     63:        }
                     64: ^eru.+ {
                     65:        look(ure,3,NOUN);
                     66:        }
                     67: ^eti.+ {
                     68:        look(ite,3,NOUN);
                     69:        }
                     70: ^evi.+ {
                     71:        look(ive,3,ADJ);
                     72:        }
                     73: ^ezi.+ {
                     74:        look(ize,3,VERB);
                     75:        }
                     76: ^gni.+ {
                     77:        look(ing,3,ING);
                     78:        }
                     79: ^hsi.+ {
                     80:        look(ish,3,ADJ);
                     81:        }
                     82: ^lac.+ {
                     83:        look(cal,3,ADJ);
                     84:        }
                     85: ^lanoi.+       {
                     86:        look(ional,5,ADJ);
                     87:        }
                     88: ^luf.+ {
                     89:        look(ful,3,ADJ);
                     90:        }
                     91: ^msi.+ {
                     92:        OUT1(NOUN);
                     93:        }
                     94: ^nam.* {
                     95:        look(man,3,NOUN);
                     96:        }
                     97: ^nem.* {
                     98:        OUT1(NV_PL);
                     99:        }
                    100: ^noi.+ {
                    101:        if(look(ion,3,NOM))nomin++;
                    102:        }
                    103: ^pihs.+        {
                    104:        look(ship,4,NOUN);
                    105:        }
                    106: ^ral.+ {
                    107:        look(lar,3,ADJ);
                    108:        }
                    109: ^ronoh {
                    110:        OUT1(NOUN_VERB);
                    111:        }
                    112: ^ro.+  {
                    113:        OUT1(NOUN);
                    114:        }
                    115: ^si.+  {
                    116:        look(is,2,NOUN);
                    117:        }
                    118: ^ssel.+        {
                    119:        look(less,4,ADJ);
                    120:        }
                    121: ^ssen.+        {
                    122:        look(ness,4,NOUN);
                    123:        }
                    124: ^sse.+ {
                    125:        look(ess,3,NOUN);
                    126:        }
                    127: ^ss.+  {
                    128:        look(ss,2,NOUN);
                    129:        }
                    130: ^suo.+ {
                    131:        look(ous,3,ADJ);
                    132:        }
                    133: ^su.+  {
                    134:        look(us,2,NOUN);
                    135:        }
                    136: ^snoi.+        {
                    137:        if(look(ion,4,PNOUN))nomin++;
                    138:        }
                    139: ^stnem.+       {
                    140:                if(look(ment,5,PNOUN))nomin++;
                    141:                }
                    142: ^secne.+       {
                    143:                if(look(ence,5,PNOUN))nomin++;
                    144:                }
                    145: ^secna.+       {
                    146:                if(look(ance,5,PNOUN))nomin++;
                    147:                }
                    148: ^s.+   {
                    149:        if(isupper(yytext[yyleng-1])){
                    150:                if(NOCAPS){
                    151:                        yytext[yyleng-1] = tolower(yytext[yyleng-1]);
                    152:                        POUT1(PNOUN);
                    153:                }
                    154:                else { OUT1(PNOUN); }
                    155:        }
                    156:        else {
                    157:                if(NOCAPS){POUT1(NV_PL);}
                    158:                else{ OUT1(NV_PL); }
                    159:        }
                    160:        }
                    161: ^tna.+ {
                    162:        look(ant,3,NOUN_ADJ);
                    163:        }
                    164: ^tnem.+        {
                    165:        if(look(ment,4,NOM))nomin++;
                    166:        }
                    167: ^tse.+ {
                    168:        look(est,3,ADJ);
                    169:        }
                    170: ^tsi.+ {
                    171:        look(ist,3,NOUN);
                    172:        }
                    173: [,\n]  {
                    174:        putchar(yytext[0]);
                    175:        }
                    176: {L}+   {
                    177:        if(isupper(yytext[yyleng-1])){
                    178:                if(NOCAPS)
                    179:                        yytext[yyleng-1] = tolower(yytext[yyleng-1]);
                    180:                if((yytext[0] == 'n' || yytext[0] == 'l') && yytext[1] == 'a'){
                    181:                        OUT1(NOUN_ADJ);
                    182:                }
                    183:                else {
                    184:                        OUT1(NOUN);
                    185:                }
                    186:        }
                    187:        else {
                    188:                OUT1(UNK);
                    189:        }
                    190:        }
                    191: ^:[\n] {
                    192:        egetd();
                    193:        }
                    194: ^:.+[\n]       {
                    195:        printf("%s",yytext);
                    196:        }
                    197: %%
                    198: look(f,n,nc)
                    199: char (*f)();
                    200: int n;
                    201: char nc;
                    202: {
                    203:        int in,nn,ret;
                    204:        char sch;
                    205:        in=0;
                    206:        sch=yytext[yyleng-1];
                    207:        if(isupper(sch)){
                    208:                yytext[yyleng-1] = tolower(sch);
                    209:                in=1;
                    210:        }
                    211:        if((*f)(&yytext[n],1,0) != 0){
                    212:                nn = (*f)(&yytext[n],1,0);
                    213:                if(nc == PNOUN)
                    214:                        if(nn == NOUN_VERB){
                    215:                                if(in == 1)nn=PNOUN;
                    216:                                else nn=NV_PL;
                    217:                        }
                    218:                ret = 0;
                    219:        }
                    220:        else {
                    221:                nn = nc;
                    222:                ret = 1;
                    223:        }
                    224:        if(in==1){
                    225:                if(nn == NOUN_VERB)nn=NOUN;
                    226:                if(!NOCAPS)yytext[yyleng-1]=sch;        
                    227:        }
                    228:        if(nn==PNOUN && yytext[0] == 's' && NOCAPS){
                    229:                POUT1(nn);
                    230:        }
                    231:        else {
                    232:                OUT1(nn);
                    233:        }
                    234:        return(ret);
                    235: }
                    236: yywrap(){
                    237:        printf(";%d\n",nomin);
                    238:        return(1);
                    239: }

unix.superglobalmegacorp.com

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