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