%{
#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;
}    /* 실행 코드 */

+ Recent posts