1 %{ 2 #ifndef lint 3 static char sccsid[] = "@(#)style2.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 } 240