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