%{
/*
* We now build a lexical analyzer to be used by a higher-level parser.
*/
#include "y.tab.h" /* token codes from the parser */
#define LOOKUP 0 /* default - not a defined word type. */
int state;
%}
%%
\n { state = LOOKUP; }
\.\n { state = LOOKUP;
return 0; /* end of sentence */
}
^verb { state = VERB; }
^adj { state = ADJECTIVE; }
^adv { state = ADVERB; }
^noun { state = NOUN; }
^prep { state = PREPOSITION; }
^pron { state = PRONOUN; }
^conj { state = CONJUNCTION; }
[a-zA-Z]+ {
if(state != LOOKUP) {
add_word(state, yytext);
} else {
switch(lookup_word(yytext)) {
case VERB:
return(VERB);
case ADJECTIVE:
return(ADJECTIVE);
case ADVERB:
return(ADVERB);
case NOUN:
return(NOUN);
case PREPOSITION:
return(PREPOSITION);
case PRONOUN:
return(PRONOUN);
case CONJUNCTION:
return(CONJUNCTION);
default:
printf("%s: don't recognize\n", yytext);
/* don't return, just ignore it */
}
}
}
. ;
%%
JXsKLyoKICogV2Ugbm93IGJ1aWxkIGEgbGV4aWNhbCBhbmFseXplciB0byBiZSB1c2VkIGJ5IGEgaGlnaGVyLWxldmVsIHBhcnNlci4KICovCgojaW5jbHVkZSAieS50YWIuaCIgICAgLyogdG9rZW4gY29kZXMgZnJvbSB0aGUgcGFyc2VyICovCgojZGVmaW5lICAgTE9PS1VQIDAgICAvKiBkZWZhdWx0IC0gbm90IGEgZGVmaW5lZCB3b3JkIHR5cGUuICovCgppbnQgc3RhdGU7CgolfQoKJSUKClxuICAgIHsgc3RhdGUgPSBMT09LVVA7IH0KClwuXG4gIHsgICAgIHN0YXRlID0gTE9PS1VQOwogICAgICAgICAgICByZXR1cm4gMDsgIC8qIGVuZCBvZiBzZW50ZW5jZSAqLwogICAgICB9CgpedmVyYiB7IHN0YXRlID0gVkVSQjsgfQpeYWRqICB7IHN0YXRlID0gQURKRUNUSVZFOyB9Cl5hZHYgIHsgc3RhdGUgPSBBRFZFUkI7IH0KXm5vdW4geyBzdGF0ZSA9IE5PVU47IH0KXnByZXAgeyBzdGF0ZSA9IFBSRVBPU0lUSU9OOyB9Cl5wcm9uIHsgc3RhdGUgPSBQUk9OT1VOOyB9Cl5jb25qIHsgc3RhdGUgPSBDT05KVU5DVElPTjsgfQoKW2EtekEtWl0rIHsKICAgICAgICAgICBpZihzdGF0ZSAhPSBMT09LVVApIHsKICAgICAgICAgICAgYWRkX3dvcmQoc3RhdGUsIHl5dGV4dCk7CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3dpdGNoKGxvb2t1cF93b3JkKHl5dGV4dCkpIHsKICAgICAgICAgICAgY2FzZSBWRVJCOgogICAgICAgICAgICAgIHJldHVybihWRVJCKTsKICAgICAgICAgICAgY2FzZSBBREpFQ1RJVkU6CiAgICAgICAgICAgICAgcmV0dXJuKEFESkVDVElWRSk7CiAgICAgICAgICAgIGNhc2UgQURWRVJCOgogICAgICAgICAgICAgIHJldHVybihBRFZFUkIpOwogICAgICAgICAgICBjYXNlIE5PVU46CiAgICAgICAgICAgICAgcmV0dXJuKE5PVU4pOwogICAgICAgICAgICBjYXNlIFBSRVBPU0lUSU9OOgogICAgICAgICAgICAgIHJldHVybihQUkVQT1NJVElPTik7CiAgICAgICAgICAgIGNhc2UgUFJPTk9VTjoKICAgICAgICAgICAgICByZXR1cm4oUFJPTk9VTik7CiAgICAgICAgICAgIGNhc2UgQ09OSlVOQ1RJT046CiAgICAgICAgICAgICAgcmV0dXJuKENPTkpVTkNUSU9OKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBwcmludGYoIiVzOiBkb24ndCByZWNvZ25pemVcbiIsIHl5dGV4dCk7CiAgICAgICAgICAgICAgLyogZG9uJ3QgcmV0dXJuLCBqdXN0IGlnbm9yZSBpdCAqLwogICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KLiAgICA7CgolJQ==