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