디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

구문이해가 안된다

치킨맛맛폰갤로그로 이동합니다. 2011.11.06 11:51:35
조회 59 추천 0 댓글 0

  #include <stdio.h>
     #include <stdlib.h>
    #include <string.h>
     #include <ctype.h>
   #include <conio.h>
     typedef struct _command     Command;
     typedef enum _tokenType     TokenType;
    typedef void (*Callback)(void);
   
    /* 토큰의 type을 정의 */
    enum _tokenType
    {
        TOKEN_INIT,
  
        TOKEN_INT,          /* "int" */
        TOKEN_LONG,         /* "long" */
  
        TOKEN_EQ,           /* "=" */
        TOKEN_SEMICOLON,    /* ";" */
  
        TOKEN_NAME,         /* 일반 문자열 */
        TOKEN_NUMBER        /* 숫자 */
    };
  
    /* 명령어들의 속성을 정의하는 구조체 */
    struct _command
    {
        TokenType   type;
        char *      command;
        Callback    call;
    };
  
    void intFunction(void);
    void longFunction(void);
  
    /* 토큰 분리를 위한 정의 */
    #define MAX_TOKEN_LENGTH    128
  
    char tokenBuffer[MAX_TOKEN_LENGTH];
    char *token = tokenBuffer;
    char *_MP = NULL;
  
    void gettoken(void);
    int is_white( char ch );
    int is_delim( char ch );
    /* 토큰 분리를 위한 정의 끝 */
  
    Command command[] =
    {
        { TOKEN_INT,    "int",      intFunction },
        { TOKEN_LONG,   "long",     longFunction }
    };
  
    TokenType tokenType = TOKEN_INIT;
    int commandNumber = sizeof(command)/sizeof(command[0]);
  
  
    int main(void)
    {
        char *src = "int a = 10; long b = 1000000;";
        int i = 0;
  
        /* gettoken() 함수에 의해서 토큰들이 분리가 될 수 있도록
         * src의 주소를 _MP에 할당한다.
         * gettoken()함수는 _MP를 이용해서 토큰을 분리하기 때문이다.
         */
        _MP = src;
  
        do
        {
            /* 토큰을 받아들여서 그 토큰에 해당하는 함수를 호출한다.
             * 바로 여기에서 함수 포인터의 위력이 나타나는 것이다.
             */
            gettoken();
            for( i = 0 ; i < commandNumber ; i++ )
                if( command[i].type == tokenType )
                    command[i].call();
        } while( tokenType != TOKEN_INIT );
        getch();
        return 0;
    }
  
    /* intFunction
     *
     * "int" 명령이 들어왔을때 실행이 되는 함수
     */
    void intFunction(void)
    {
        char name[MAX_TOKEN_LENGTH];
        int  var = 0;
  
        /* 토큰을 받아들인다. 변수 이름이 와야 한다. */
        gettoken();
  
        /* 받아들인 토큰을 name 배열에 저장한다. 즉, 변수의 이름 */
        strcpy( name, token );
  
        gettoken();
        if( tokenType == TOKEN_EQ )
       {
           gettoken();
           var = atoi(token);
 
           gettoken();
           if( tokenType != TOKEN_SEMICOLON )
           {
               fprintf( stderr, "`;\' is missing in `int\' operation.\\n" );
               exit(1);
           }
       }
       else if( tokenType != TOKEN_SEMICOLON )
       {
           fprintf( stderr, "`;\' is missing in `int\' operation.\\n" );
           exit(1);
       }
 
       fprintf( stdout, "%s(%d;int) is created!\\n", name, var );
   }
 
   /* longFunction
    *
    * "long" 명령이 들어왔을때 실행이 되는 함수
    */
   void longFunction(void)
   {
       char name[MAX_TOKEN_LENGTH];
       long  var = 0;
 
       gettoken();
 
       strcpy( name, token );
 
       gettoken();
       if( tokenType == TOKEN_EQ )
       {
           gettoken();
           var = atol(token);
 
           gettoken();
           if( tokenType != TOKEN_SEMICOLON )
           {
               fprintf( stderr, "`;\' is missing in `long\' operation.\\n" );
               exit(1);
           }
       }
       else if( tokenType != TOKEN_SEMICOLON )
       {
           fprintf( stderr, "`;\' is missing in `long\' operation.\\n" );
           exit(1);
       }
 
       fprintf( stdout, "%s(%ld;long) is created!\\n", name, var );
   }
 
   /* gettoken
    *
    * 토큰을 받아들이는 함수
    */
   void gettoken(void)
   {
       register int i = 0;
       char *temp = tokenBuffer;
 
       while( is_white( *_MP ) ) _MP++;
 
       if( *_MP == \'\\0\' )
      {
           *temp = \'\\0\';
           tokenType = TOKEN_INIT;
           return;
       }
 
       *temp++ = *_MP++;
 
       switch( *(_MP - 1) )
       {
           case \'=\' :
               *temp = \'\\0\';
               tokenType = TOKEN_EQ;
               return;
           case \';\' :
               *temp = \'\\0\';
               tokenType = TOKEN_SEMICOLON;
               return;
           default :
               if( isdigit( *(_MP-1) ) )
               {
                   while( !is_delim(*_MP) ) *temp++ = *_MP++;
                   *temp = \'\\0\';
                   tokenType = TOKEN_NUMBER;
               }
               else
               {
                   while( !is_delim(*_MP) ) *temp++ = *_MP++;
                   *temp = \'\\0\';
 
                   for( i = 0 ; i < commandNumber ; i++ )
                   {
                       if( strcmp( command[i].command, token ) == 0 )
                       {
                           tokenType = command[i].type;
                           return;
                       }
                   }
                   tokenType = TOKEN_NAME;
                   return;
               }
       }
   }
 
   /* is_white
    *
    * ch가 공백문자이면 1, 그렇지 않으면 0을 리턴
    */
   int is_white( char ch )
   {
       if(ch == \' \' || ch == \'\\t\' || ch == \'\\r\' || ch == \'\\n\' ) return(1);
       else return(0);
   }
 
   /* is_delim
    *
    * ch가 분리자이면 1을 그렇지 않으면 0을 리턴
    */
   int is_delim( char ch )
   {
       if(strchr("=; \\t\\r\\n", ch) || ch == 0 )
           return(1);
       return(0);
   }

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
286835 아아 난 언제쯤 꿈의 연봉 1400을 받을까 ㅠㅠ [1] 거칠게갤로그로 이동합니다. 11.11.08 87 0
286834 SI에서 연봉 1400 받으며 3년 버티기 vs 군대 가기 [3] 거칠게갤로그로 이동합니다. 11.11.08 133 0
286833 오픈업 새퀴야 얼른 궁금한 거 올려라 ^0^갤로그로 이동합니다. 11.11.08 22 0
286831 내 경력은 참 그지같다 [8] 천회장(221.149) 11.11.08 120 0
286830 형들은 기사 따는데 얼마나 걸렸어? [2] -ㅂ-(210.90) 11.11.08 47 0
286829 자바에서 스택은 짜여져있는데 왜 큐는 인터페이스임? [2] ^0^갤로그로 이동합니다. 11.11.08 67 0
286828 고민 좀 하다가 막히는 부분을 질문하면 시원하게 뚫어지겠지만 꼬꼬월드갤로그로 이동합니다. 11.11.08 37 0
286827 정말이그림이 표준적인거임?! 뇌자알이 ㅄ임?! [4] 흐이풍치(222.107) 11.11.08 107 0
286826 프게이들아 날 병특(보충역)으로 데려가라 [4] ^0^갤로그로 이동합니다. 11.11.08 77 0
286825 자바도움좀줘형들ㅠㅠ [6] OpenUp(211.246) 11.11.08 54 0
286824 오오오 씨발 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ [3] ^0^갤로그로 이동합니다. 11.11.08 60 0
286823 월계동서 자바 공부할 사람 없으려나? [2] ^0^갤로그로 이동합니다. 11.11.08 40 0
286820 링크트리스트스택 잘 아는횽 있어?! 이 그림 맞는거임?! [4] 흐이풍치(222.107) 11.11.08 73 0
286819 개발자 등급 설정할 때 기사 자격증 따기 이전에는 [2] ^0^갤로그로 이동합니다. 11.11.08 69 0
286818 db연동말구 이클립스창있지?? [9] OpenUp(211.246) 11.11.08 66 0
286817 프갤이 정전갤인 이유 [1] -ㅂ-(210.90) 11.11.08 38 0
286816 개발자 단가는 어디서 볼 수 있나여??? [3] 거칠게갤로그로 이동합니다. 11.11.08 143 0
286815 형들 자바할줄아는형있음?? [5] OpenUp(211.246) 11.11.08 70 0
286814 php는 돈이 안 되나? [2] -ㅂ-(210.90) 11.11.08 61 0
286813 개발자가 부족해지니 개발자도 고생하는거 같음 [15] 꼬꼬월드갤로그로 이동합니다. 11.11.08 175 0
286812 난 엠씨횽 처럼 투잡으로 어플 개발할꺼다 -0- [1] 거칠게갤로그로 이동합니다. 11.11.08 72 0
286811 프.. 프로그래밍 갤러들 나쁘다.. -ㅂ-(210.90) 11.11.08 45 0
286810 내복동 가까이.... [1] iljeomobolt갤로그로 이동합니다. 11.11.08 45 0
286809 아오 시밤 아이폰어플 개발 회사에서 왜이리 전화오냐 [5] 거칠게갤로그로 이동합니다. 11.11.08 114 0
286806 일본 원전 뉴스는 나오지도 않는구나 하지만 짤방을 보라 [4] 거칠게갤로그로 이동합니다. 11.11.08 110 0
286805 횽들 은행 잔고는 서버에 저장되는겨? [3] 다림줄갤로그로 이동합니다. 11.11.08 75 0
286804 카울리 같은거 광고 노출만 많이되도 수익금 발생? 아님 꼭 클릭해야함? [13] 쿄스케갤로그로 이동합니다. 11.11.08 119 0
286803 다시 사그라든 sw의 관심 거칠게갤로그로 이동합니다. 11.11.08 73 0
286802 Image Deblurring (이미지 디블러링) [3] 디블러링(121.136) 11.11.08 170 0
286801 웹서버에 대해 잘 아는 횽 잇으면 답변 좀 부탁드릴게요.. [8] 255.255(218.147) 11.11.08 110 0
286800 소행성이 떨어지는게 확실한가보다.......... 거칠게갤로그로 이동합니다. 11.11.08 62 0
286798 교스케는 [1] Adelposs갤로그로 이동합니다. 11.11.08 43 0
286797 야야 그래도 솔직히 말이다 [4] PoRO갤로그로 이동합니다. 11.11.08 66 0
286795 닭튀김 저새끼가 내 죵니 순수한 마음을 난도질 했다 시팔 [1] PoRO갤로그로 이동합니다. 11.11.08 59 0
286793 형들 우리 앱 하나씩 만들어서 [5] -ㅂ-(210.90) 11.11.08 86 0
286792 소행성 충돌 3시간 전 입니다 고갱님 [2] 거칠게갤로그로 이동합니다. 11.11.08 73 0
286791 갤러들아 비트맵뷰어 짜집기한건데 소스분석좀해줘 [2] 이세상끝에서갤로그로 이동합니다. 11.11.08 44 0
286790 니들 DDNS를 뭐라고 부르는지 아냐? [9] PoRO갤로그로 이동합니다. 11.11.08 96 0
286788 안드로이드나 아이폰 중에 ui 특이한거 본사람?? [12] 쿄스케갤로그로 이동합니다. 11.11.08 131 0
286787 어쩌다 보니 프갤 4년차네... [1] 폐인의세계갤로그로 이동합니다. 11.11.08 43 0
286786 난 코딩보다 컴조립을 잘함 [6] 꼬꼬월드갤로그로 이동합니다. 11.11.08 92 0
286785 나도 1400만원만 받고싶다.. [6] 쿄스케갤로그로 이동합니다. 11.11.08 107 0
286784 야 프갤러들 웹 에이전시 차리자 [3] 분당살람갤로그로 이동합니다. 11.11.08 93 0
286783 사람들은 자신의 닉네임을 지을 때 신중할필요가 있다. [4] 개쉛기갤로그로 이동합니다. 11.11.08 118 0
286781 그런데 프로그래밍 공부할라면 뭐부터 해야하나요? [6] 디아몬드갤로그로 이동합니다. 11.11.08 123 0
286779 진짜 옛날옛적에 영국에서 [4] 분당살람갤로그로 이동합니다. 11.11.08 81 0
286778 이 정도 앱 코딩하는데 얼마나 걸려? [2] 소유미갤로그로 이동합니다. 11.11.08 92 0
286777 차라리 이대로 행성이 꼴아박고 멸망했으면 좋겠다. [1] 개쉛기갤로그로 이동합니다. 11.11.08 55 0
286776 구글 번역 quota 가 대폭 줄어들었다. [2] 시불라미갤로그로 이동합니다. 11.11.08 105 0
286775 형들 코딩 진자 재밌는거 같아요!!!! [3] 군대지원(183.101) 11.11.08 80 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2