디시인사이드 갤러리

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

갤러리 본문 영역

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

과제빡쳐(61.78) 2013.03.21 00:38:22
조회 128 추천 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 - -
350601 80살이 되서도 코딩할거냐? [3] arclayer갤로그로 이동합니다. 13.03.19 87 0
350600 글삭튀 클라스 [30] pas(110.70) 13.03.19 146 0
350597 64비트운영체제에서 [1] dd(121.163) 13.03.19 60 0
350596 16진수로 10 27이 1500이라는데 이런 계산 어떻게 하죠? [2] 징기스칸4갤로그로 이동합니다. 13.03.19 56 0
350595 기분최고다 dd(220.120) 13.03.19 31 0
350594 크롬에는 한글이 써지는데 익스플로에는 안써지네 [1] 백이.갤로그로 이동합니다. 13.03.19 37 0
350592 징기스칸4 블로그 가보니까 낭만가이네 근성가이(211.237) 13.03.19 100 1
350589 C언어 파일에서 문장 읽어들일때 말인데요 [1] ㅇㅇ(175.193) 13.03.19 44 0
350588 c++ 처음배우는데 질문좀~~ [5] 성동구 (58.233) 13.03.19 69 1
350586 말죽거리잔혹사재미있네 [4] 백이(182.214) 13.03.19 54 0
350584 신입 월급을 3개월간 안주는 회사는 무엇인가요? [9] 정씨갤로그로 이동합니다. 13.03.19 210 0
350583 힛갤보고왔는데 결국 힛갤의 발단은 어떻게됨? [2] 이신알갤로그로 이동합니다. 13.03.19 76 0
350582 케이블에 대해 갑자기 든 생각인데 [2] DART(116.41) 13.03.19 66 0
350581 무슨게임이 짱짱맨? [3] 나리링갤로그로 이동합니다. 13.03.19 102 0
350580 집중력 종범 [2] 마이리틀포니짱짱갤로그로 이동합니다. 13.03.19 74 0
350579 리눅스 관련 질문 대답해줄 전문가 있어요? [4] 트라야누스(182.252) 13.03.19 92 0
350578 공비 없냐? [5] 분당살람갤로그로 이동합니다. 13.03.19 109 0
350577 프갤 형님들께 질문 [2] ㅎㅋㅋㅋ(59.152) 13.03.19 58 0
350576 돋긔랑 세이퍼랑 대결하면 누가 이길까 ㅋㅋㅋ [7] Colombia갤로그로 이동합니다. 13.03.19 167 0
350575 형들 질문있는데 [1] ㅂㅂㅂㅂ(123.215) 13.03.19 34 0
350574 ms웹 사이트에 있는 윈도우8 부팅 이야기 약간의 구라가 있는 듯 [4] 분당살람갤로그로 이동합니다. 13.03.19 121 0
350573 자꾸 원격서버에 짱깨들이 접속시도 한다 [4] Margin Call갤로그로 이동합니다. 13.03.19 115 0
350572 헉 디시네임드 사랑돋긔님이시다... 여덟글자갤로그로 이동합니다. 13.03.19 89 0
350569 C 포인터 질문이요 [3] 야망인(124.137) 13.03.19 88 0
350567 자바 소켓통신에서 네트워크 케이블 언플러그상태는 어떻게 알수있음? [4] sdfsf(116.37) 13.03.19 96 0
350564 출력되는 모든 숫자를 한글로 바꾸는건 없음? [5] 거지(175.200) 13.03.19 141 0
350561 여자 프로그래머 까지 마라 [2] (1.214) 13.03.19 275 0
350560 지난주에 강원랜드에 갔었지. ㅇㅇ [6] ☎2.52™갤로그로 이동합니다. 13.03.19 121 0
350559 예전에 연락하고 지내던 일본 혐한 게임 기획자 한명 있었는데.. [3] ☎2.52™갤로그로 이동합니다. 13.03.19 178 0
350557 가슴 둘레 재는 앱을 왜 만드냐 ? ㅇㅇ 이런 것을 만들어야지 ㅇㅇ [6] ☎2.52™갤로그로 이동합니다. 13.03.19 133 0
350556 그냥노멀한인생+여친 vs 존나천재인생+여자못만남 [3] ff(211.36) 13.03.19 90 0
350555 여기갤러리는 왜 사람들이 안사나요 [6] 여덟글자갤로그로 이동합니다. 13.03.19 82 0
350554 난 미소녀였지. ㅇㅇ [2] ☎2.52™갤로그로 이동합니다. 13.03.19 81 0
350553 프갤에가슴 둘레 제는 어플만들다던놈 잇지않앗냐 [1] 케마(1.218) 13.03.19 90 0
350552 내가 미소녀 였다면 [2] 백이(223.62) 13.03.19 63 0
350551 아 같은 학과 여학생한테 너무 [3] 징기스칸4갤로그로 이동합니다. 13.03.19 125 0
350550 지린다 유니티 [4] GG다요(121.134) 13.03.19 139 0
350548 내년에 방통대 입학할껀대. 지금 뭐공부 해야됄까. [5] 1234(122.128) 13.03.19 133 0
350547 숫자를 문자열로 어떻게 출력함? [4] 거지(175.200) 13.03.19 111 1
350546 경제학에서의 합리적인 인간이란? [3] DART(116.41) 13.03.19 119 0
350543 외국에는 예쁘고 프로그램잘짜는 여자프로그래머있나요? [1] 근성가이(211.237) 13.03.19 119 0
350542 저 마지막으로 수학책 질문 하나 떤지고감 [3] 야간편돌이(175.116) 13.03.19 57 0
350541 여성 프로그래머의 인식에 대한 근거 [2] 야간편돌이(175.116) 13.03.19 144 2
350539 남자개발자가 여자 개발자에게 피해의식을 느끼는 이유 [2] 유이(14.52) 13.03.19 293 1
350536 2의 10억승 iljeomobolt갤로그로 이동합니다. 13.03.19 126 0
350535 예전 한국항공 있을때 뽀샵 대가를 미국에서 데려왔었지. ㅇㅇ ☎2.52™갤로그로 이동합니다. 13.03.19 64 0
350533 진짜 막막하다. [1] 1234(122.128) 13.03.19 54 0
350532 가상현실 이야기 야간편돌이(175.116) 13.03.19 37 0
350529 가상현실 이야기 나오는 것을 보니.. [3] ☎2.52™갤로그로 이동합니다. 13.03.19 59 0
350528 형들 말대로 사이트 게시판 확 줄였어요. [4] 가비다(121.146) 13.03.19 96 0
뉴스 김형석 X 이창섭, ‘사계’ 프로젝트-‘그 자리에, 그 시간에’ 오늘(27일) 발매! 디시트렌드 07.28
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2