디시인사이드 갤러리

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

갤러리 본문 영역

재귀하상파서에서 not구현하는법! ㅠㅠ 개새들어와봐 ㅠㅠ 이거 맞는것같은

과제빡쳐(61.78) 2013.03.21 00:38:22
조회 129 추천 0 댓글 7


이거근데 아무리봐도 해준대로 듣고보니까 젤 앞에다가 하는게 맞는것같아서
따로 빼서 했는데 . . 아무리해도 parse error ^_ㅠ 근데 지금 이거만잡고몇시간있더니 넘힘드러
못찾겠다 왜 에러야 디버깅해도모르게썽 아나 왜이러지 얘 넘 속썩인다




#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#define TRUE 1
#define FALSE 0

int token; /* holds the current input character for the parse */

/* declarations to allow arbitrary recursion */
int command(void);
int expr(void);
int term(void);
int factor(void);
int number(void);
int digit(void);
int prefix(void);

void error(void) //에러처리
{ printf("parse error\n");
  exit(1);
}

void getToken(void) //토큰하나를 불러온다.
{ /* tokens are characters */
  token = getchar();
}

void match(char c)
{if (token == c) getToken(); //char c가 토큰이랑 같으면 그것을 불러온다.
  else error();
}


int command(void)
/* command -> expr '\n' */
{ int result =prefix(); 
  if (token == '\n') /* end the parse and print the result */
     printf("The result is: %d\n",result);
  else error();
  return result;
}

int prefix(void) //이부분 안된다 !연산자 최우선순위
        int result;
        if(token == '!')  //젤앞에 !가 나오면 ㅜㅜㅜㅜㅜㅜ
        { result = !expr(); // 반대로..제발반대로되랏
        
        else 
        {result = expr();}
        return result;
}
int expr(void) //이 안에 비교연산도 다 들어가야 한다. result를 도출
/* 비교 연산을 쓸 때 true면 1을 리턴 , false면 0을 리턴시킨다*/
        int result = term(); //우선순위에 따라 사칙연산 먼저 계산한다.
        int value1,value2; //비교연산을 위해 저장 할 . .

        
        while (token == '=' )  // == 구현부분
                
                        match('='); 
                        match('=');
                        value1 = result;
                        value2 = expr();
                        if(value1 == value2) // 정말로 == 이면 1을 리턴
                        {
                                result = TRUE;
                                printf("TRUE\n");
                        }
                        else 
                        {
                                result = FALSE; //아니면 0을 리턴
                                printf("FALSE\n");
                        }
                }

        while (token == '!' )  
        
                        match('!');
                        if(token == '=')  //!= 구현하는 것 ~가 아니다란 의미 2!=3 ->1
                        {
                                match('=');
                                value1 = result;
                                value2 = expr();
                                if(value1 != value2)
                                {
                                        result = TRUE;
                                        printf("TRUE\n");
                                }
                                else 
                                {
                                        result = FALSE;
                                        printf("FALSE\n");
                                }
        
                        }

                }
        
        
        while (token == '>')  // > 를 만나면 그 뒤에꺼 다 계산해서 끌어와야 함 
        
                match('>');
            value1 = result;
                value2 = expr();
                if(value1 > value2) //정말로 > 이면 1을 리턴
                {
                        result = TRUE;
                        printf("TRUE\n");
                }
                else 
                {
                        result = FALSE; //아니면 0 을 리턴
                        printf("FALSE\n");
                }
        }

        while (token == '<')  // > 를 만나면 그 뒤에꺼 다 계산해서 끌어와야 함 
        
                match('<');
            value1 = result;
                value2 = expr();
                if(value1 < value2) // 정말로 < 이면 1을 리턴
                {
                        result = TRUE;
                        printf("TRUE\n");
                }
                else 
                {
                        result = FALSE; //아니면 0을 리턴
                        printf("FALSE\n");
                }        
        }

        while (token == '+') // 더하기
        
                match('+');
                result += term();
        }
        
        while (token == '-')  //빼기
        
                match('-');
                result -= term();
        }

  return result;
}


int term(void) //곱하기 나누기
/* term -> factor { '*' '/' factor } */
  int result = factor(); //괄호와 넘버를 먼저 가져온 것을 result로 함
  while (token == '*')
  { 
          match('*');
          result *= factor();
  }

  while (token == '/')
  { 
          match('/');
          result /= factor(); 
          //0으로 나눌 때 에러 출력
  }
  return result;
}

int factor(void) //괄호를 총괄하는 함수, 넘버를 가져온다.
/* factor -> '(' expr ')' | number */
{ int result;
  if (token == '(')
  { match('(');
    result = expr();
    match(')');
  }
  else
    result = number();
  return result;
}

int number(void) //ND
/* number -> digit { digit } */
{ int result = digit();
  while (isdigit(token))
  /* the value of a number with a new trailing digit
    is its previous value shifted by a decimal place
    plus the value of the new digit
  */
    result = 10 * result + digit();
  return result;
}

int digit(void) //D
/* digit -> '0' | '1' | '2' | '3' | '4' 
                | '5' | '6' | '7' | '8' | '9' */
{ int result;
  if (isdigit(token))
  { /* the numeric value of a digit character
       is the difference between its ascii value and the
       ascii value of the character '0'
    */
    result = token - '0';
    match(token);
  }
  else
    error();
  return result;
}

void parse(void)
{ getToken(); /* get the first token */
  command(); /* call the parsing procedure for the start symbol */
}

main()
{ parse();
  return 0;
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 반응이 재밌어서 자꾸만 놀리고 싶은 리액션 좋은 스타는? 운영자 25/07/28 - -
AD 휴대폰 액세서리 세일 중임! 운영자 25/07/28 - -
351158 오늘은 4시에 잠자야지~ go2갤로그로 이동합니다. 13.03.22 21 0
351155 처묵처묵. [1] fm100(220.76) 13.03.22 29 0
351153 형들 이중포인터 배열로 사용할 때 까먹은게 있어서 물어봄.. [29] 야간편돌이(175.196) 13.03.22 199 0
351152 형님형님 빽만 믿고 응딩이 응딩이 뒤에 숨어서 [2] Packet갤로그로 이동합니다. 13.03.22 100 0
351151 <img>태그 크기 기본값지정 못함? [5] go2갤로그로 이동합니다. 13.03.22 62 0
351150 형님 오시니깐 급 활발해지네 [6] Packet갤로그로 이동합니다. 13.03.22 127 0
351149 오랜만에 VB 소스봤더니.. 다까먹어서.. 효율이 안오르네.. [1] 꼬마야갤로그로 이동합니다. 13.03.22 47 0
351148 C++ 빠른 헬프를 부탁해 [19] ㅇㅇㅇ(39.7) 13.03.22 169 0
351147 ㅅㅂ다만들어간다 go2갤로그로 이동합니다. 13.03.22 41 0
351145 퇴근하니까 배고픔. [2] fm100(220.76) 13.03.22 65 0
351144 밤이니 투척 [1] &gt;&lt;(1.209) 13.03.22 72 0
351142 밤?새벽엔? [3] Packet갤로그로 이동합니다. 13.03.22 84 0
351141 재업 구조요청)Model Sim 사용할줄 아시는분.....부탁드려요 뀨잉(118.45) 13.03.22 38 0
351138 F5키 누르면 '양식 다시 제출 확인'창 뜨는거 어떻게 없앰?? [1] go2갤로그로 이동합니다. 13.03.22 433 0
351137 프로그래밍 개초짠데 [4] ㅁㄴㅇ(1.245) 13.03.22 111 0
351136 아이리쨩 내일 날씨는 어때? [2] 아이리쨩(218.37) 13.03.22 61 0
351134 이거 어떻게없앰? [1] go2갤로그로 이동합니다. 13.03.22 85 0
351133 데이터베이스 고수 형 없나 좀 도와줘 [1] 도와줘(112.187) 13.03.22 76 0
351131 c#재밋음? [17] go2갤로그로 이동합니다. 13.03.21 157 0
351130 html 책 추천 좀 [2] 1234(115.161) 13.03.21 152 0
351129 금딸 준비 됐지? [2] 에어로홍갤로그로 이동합니다. 13.03.21 186 0
351128 ... 망할 비졀익스프레스... LastCorona갤로그로 이동합니다. 13.03.21 50 0
351127 인생에 대해서 의문점이 생겼는데요 [8] 야간편돌이(175.196) 13.03.21 135 0
351126 폰트에 대해서 궁금한게 있는데요.. 인간(110.35) 13.03.21 47 0
351125 컴파일러에 대한 조은 아이디어없을까 [3] ㅇㅇ(14.32) 13.03.21 62 0
351124 circular DHT가 잘 이해가 안간다.. [1] 12(59.12) 13.03.21 443 0
351123 잠재적 치갤럼들아 [1] ㅇㅇ(61.98) 13.03.21 76 0
351122 c언어 질문있다. [6] 짱쨩맨(175.214) 13.03.21 107 0
351120 it bank 다닌다. 질문 받는다, (씹병신은 아니더라) [15] 好口(115.139) 13.03.21 481 0
351119 횽이 간만에 글싼다... ㅋㄱ(183.96) 13.03.21 69 0
351118 아래글쓴사람인디 제발도ㅗ와주셍ㅅ [2] 스파게티.갤로그로 이동합니다. 13.03.21 86 0
351117 오빠들ㅁ한번만 도와주세요 [3] 신입생(218.48) 13.03.21 125 0
351116 카투사 vs 정보보호기술병 [24] 반헤일런갤로그로 이동합니다. 13.03.21 405 0
351114 형들 인서울 중위권 컴공과 게인데 기계공학과 복전 어떻게 생각함? [9] 컴공(210.91) 13.03.21 269 0
351113 Model Sim 쓸줄 아시는분있나요 [5] 뀨잉(118.45) 13.03.21 88 0
351112 (고수님들 도와줏메)윈7 64비트 오라클 11g 설치 오류등 아시는분! [7] 약빤양갤로그로 이동합니다. 13.03.21 311 0
351110 시발 허리 아퍼 뒤지겠다!!! [2] 멍청닭(182.211) 13.03.21 63 0
351109 요새 모바일 웹은 안만드냐? [7] ?(220.69) 13.03.21 198 0
351108 고명하신 프갤성님들 자바 개초보가 질문 좀 드릴게요 ㅜㅠ [1] 자바개초보(218.147) 13.03.21 80 0
351107 무슨 중2병 갤러리 입니꽈? ㅁㄴㅇㄹ(58.143) 13.03.21 78 0
351106 미국 20위권대학 인공지능랩실 합격.!!!!! [11] (110.70) 13.03.21 345 0
351105 북한소행이 맞는거냐???? [2] (218.236) 13.03.21 106 0
351103 횽들 나 질문좀.. [2] ㅇㅇㅇㅇ(1.252) 13.03.21 61 0
351100 해킹 부칸 마즘? ㅇㅇ(61.98) 13.03.21 38 0
351097 아까 졸작 질문 올렸던 놈인데요. [4] ㅁㄴㅇㄹ(121.173) 13.03.21 157 0
351095 하느님이 말이야,, [2] ㅁㄴㅇ(1.245) 13.03.21 62 0
351092 프갤 눌렀는데 철학갤 들어왔네요 [5] Colombia갤로그로 이동합니다. 13.03.21 158 0
351090 어플제작관련 질문좀요 ㅠㅠ 굽신굽신 ㅍㄹㄷㄴㄹㄴ(14.35) 13.03.21 82 0
351088 [바보같은질문] 서버에서 gif나 동영상을 구동시키면 [2] ㅅㅎ(220.117) 13.03.21 94 0
351087 어휴 ㅎㅋㅋㅋ(59.152) 13.03.21 89 0
뉴스 중견배우 주진모, HB엔터테인먼트와 전속계약 체결! 디시트렌드 07.30
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2