%{
#include
#include
enum tGrammar{TEOF, VERB, ADVERB, PREPOSITION, CONJUNCTION, ADJECTIVE, UNCONJUGATIONADJECTIVE,PRONOUN,NOUN,TDOT,SPACE,TSPOT};
%} /* 액션코드로 C 언어 기술 시 필요한 자료 구조, 변수, 그리고
상수 등을 정의. 렉스의 출력인 lex.yy.c의 앞부분에 복사
치환식은 정규표현, 이름은 정규 표현의 이름 */
letter[a-zA-Z]
%%
is|am|are|were|was|be|being|been|do|does|did|will|would|should|can|could|has|have|had|go return(VERB);
very|simply|gently|quietly|really|softly|highlt|calmly|angrily|loudly return(ADVERB);
to|from|behind|in|for|with|on|above|at|between return(PREPOSITION);
if|then|and|but|so|because|or|as return(CONJUNCTION);
their|my|you're|his|her return(ADJECTIVE);
a|the|an return(UNCONJUGATIONADJECTIVE);
I|you|he|she|we return(PRONOUN);
{letter}+ return(NOUN);
[ \t\n];
" " return(SPACE);
\. return(TDOT);
\, return(TSPOT);
%%
/*토큰 형태를 표현하는 정규 표현
인식되었을 때 처리하는 실행부분으로 C 언어로 기술*/
int main()
{
enum tGrammar tg;
printf("==========lex start==========\n");
while((tg=yylex())!=TEOF)
{
switch(tg)
{
case VERB :
printf("%s : VERB\n", yytext);
break;
case ADVERB :
printf("%s : ADVERB\n", yytext);
break;
case PREPOSITION :
printf("%s : PREPOSITION\n", yytext);
break;
case CONJUNCTION :
printf("%s : CONJUNCTION\n", yytext);
break;
case ADJECTIVE :
printf("%s : ADJECTIVE\n", yytext);
break;
case UNCONJUGATIONADJECTIVE :
printf("%s : UNCONJUGATIONADJECTIVE\n", yytext);
break;
case PRONOUN :
printf("%s : PRONOUN\n",yytext);
break;
case NOUN :
printf("%s : NOUN\n",yytext);
break;
case TDOT :
printf("%s : End.\n",yytext);
break;
case SPACE :
break;
case TSPOT :
printf("%s : SPOT.\n",yytext);
break;
}
}
return 0;
}
int yywrap(){printf("===========lex end==========\n");
return 1;
} /* 실행 코드 */