디시인사이드 갤러리

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

갤러리 본문 영역

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

과제빡쳐(61.78) 2013.03.21 00:38:22
조회 127 추천 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/14 - -
AD 휴대폰 액세서리 SALE 운영자 25/07/15 - -
351122 c언어 질문있다. [6] 짱쨩맨(175.214) 13.03.21 106 0
351120 it bank 다닌다. 질문 받는다, (씹병신은 아니더라) [15] 好口(115.139) 13.03.21 481 0
351119 횽이 간만에 글싼다... ㅋㄱ(183.96) 13.03.21 65 0
351118 아래글쓴사람인디 제발도ㅗ와주셍ㅅ [2] 스파게티.갤로그로 이동합니다. 13.03.21 83 0
351117 오빠들ㅁ한번만 도와주세요 [3] 신입생(218.48) 13.03.21 123 0
351116 카투사 vs 정보보호기술병 [24] 반헤일런갤로그로 이동합니다. 13.03.21 404 0
351114 형들 인서울 중위권 컴공과 게인데 기계공학과 복전 어떻게 생각함? [9] 컴공(210.91) 13.03.21 266 0
351113 Model Sim 쓸줄 아시는분있나요 [5] 뀨잉(118.45) 13.03.21 87 0
351112 (고수님들 도와줏메)윈7 64비트 오라클 11g 설치 오류등 아시는분! [7] 약빤양갤로그로 이동합니다. 13.03.21 310 0
351110 시발 허리 아퍼 뒤지겠다!!! [2] 멍청닭(182.211) 13.03.21 61 0
351109 요새 모바일 웹은 안만드냐? [7] ?(220.69) 13.03.21 195 0
351108 고명하신 프갤성님들 자바 개초보가 질문 좀 드릴게요 ㅜㅠ [1] 자바개초보(218.147) 13.03.21 78 0
351107 무슨 중2병 갤러리 입니꽈? ㅁㄴㅇㄹ(58.143) 13.03.21 74 0
351106 미국 20위권대학 인공지능랩실 합격.!!!!! [11] (110.70) 13.03.21 344 0
351105 북한소행이 맞는거냐???? [2] (218.236) 13.03.21 104 0
351103 횽들 나 질문좀.. [2] ㅇㅇㅇㅇ(1.252) 13.03.21 58 0
351100 해킹 부칸 마즘? ㅇㅇ(61.98) 13.03.21 38 0
351097 아까 졸작 질문 올렸던 놈인데요. [4] ㅁㄴㅇㄹ(121.173) 13.03.21 155 0
351095 하느님이 말이야,, [2] ㅁㄴㅇ(1.245) 13.03.21 62 0
351092 프갤 눌렀는데 철학갤 들어왔네요 [5] Colombia갤로그로 이동합니다. 13.03.21 155 0
351090 어플제작관련 질문좀요 ㅠㅠ 굽신굽신 ㅍㄹㄷㄴㄹㄴ(14.35) 13.03.21 79 0
351088 [바보같은질문] 서버에서 gif나 동영상을 구동시키면 [2] ㅅㅎ(220.117) 13.03.21 94 0
351087 어휴 ㅎㅋㅋㅋ(59.152) 13.03.21 84 0
351086 코세횽은 신의 존재에 대해 어떻게 생각함? [57] 12(59.12) 13.03.21 471 0
351083 머나 먼 미래가 되면 매트릭스처럼 기계가 사람을 지배할까.. [7] 백이.갤로그로 이동합니다. 13.03.21 110 0
351082 그럼 페렐만이 증명한 푸엥카레 추측 쉽게 설명좀 해주라 코데사퍼 [2] Margin Call갤로그로 이동합니다. 13.03.21 118 0
351081 졸라 똑독해지고 싶다 ㅡㅡ [3] ㅇㅇ(223.33) 13.03.21 73 0
351080 양자컴퓨터.jpg [7] Margin Call갤로그로 이동합니다. 13.03.21 190 0
351079 파이썬 질문 하나만 할께욤........ [6] ㅇㅇ(1.245) 13.03.21 121 0
351077 코데사퍼 코데사퍼 [3] Margin Call갤로그로 이동합니다. 13.03.21 83 0
351076 이쯤에서 레전드 야짤 푼다.jpg dd(1.214) 13.03.21 133 0
351075 기획팀장님께서 칼퇴의 끈을 끊어주시었다 [1] 얼룩돼지갤로그로 이동합니다. 13.03.21 90 0
351074 코데사퍼 좀 부러움 ㅇㅇ [5] Margin Call갤로그로 이동합니다. 13.03.21 126 0
351072 <embed src="http://player.bgmstore.net/0 ㅇㅇ(125.177) 13.03.21 42 0
351071 [1] ㅇㅇ(125.177) 13.03.21 34 0
351069 오타쿠 집에 갔냐? [1] Margin Call갤로그로 이동합니다. 13.03.21 47 0
351067 TEST [29] (168.126) 13.03.21 317 0
351065 형들 이거 졸업작품 주제로 어떤지 좀 봐주세요 [10] 나는글쓴이다(117.16) 13.03.21 220 0
351064 저학년 늅늅들 어휴,,, dot(113.30) 13.03.21 56 0
351063 우리나라 해커들이 ㅉㅈㅇ인이유 [8] adfaf(220.120) 13.03.21 204 0
351061 주워온 컴퓨터 쓰는 사람 손 들어봐 [1] dot(113.30) 13.03.21 73 0
351059 오타쿠 집에가는 열쇠.code [7] Margin Call갤로그로 이동합니다. 13.03.21 152 0
351058 DB쿼리만으로 풀네임을 성, 이름으로 쪼개는건 안되지? [11] (211.109) 13.03.21 106 0
351057 시발 피자대첩 저 재밌는걸 놓치다니 [15] 땡칠도사갤로그로 이동합니다. 13.03.21 379 0
351056 C프로그래밍 문제좀 풀어주세요.. [7] 오타쿠(59.12) 13.03.21 128 0
351053 아직도 좆퇴물 비주얼 6.0을 쓰는애들이 있다는게 문화컬쳐 [4] ㅇㅇ(1.247) 13.03.21 105 0
351051 외부 라이브러리 사용 안하고 파이썬으로 만들만한 프로그램 추천좀 ㅋ [2] (121.134) 13.03.21 89 0
351050 흐헣헣ㅎㅎ후ㅜㅜㅜㅜㅜ 형들 이거 왜 쓰레기값이 출력되는거지.. (좆초보) [13] 입문자(61.252) 13.03.21 97 0
351048 codesafter 님... 상담좀... [13] 꼬마야갤로그로 이동합니다. 13.03.21 261 0
351046 형님들 안드로이드에서 showDialog(0) 이거 못쓰던대 뭘로써야되? [5] 잠맘보(69.31) 13.03.21 132 0
뉴스 “전세금 5억원 날려” 양치승, 결국 눈물의 폐업…“환불 받으시라” 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2