LR 파싱을 이용한 ( C언어 ) 계산기 프로그램을 작성
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

LR 파싱을 이용한 ( C언어 ) 계산기 프로그램을 작성에 대한 보고서 자료입니다.

본문내용

// this is a terminal node
// if it is a terminal node, only num type will have value
// in the data field.
// There is nothing to do.
}
else { // this is a nonterminal node
for (i=0; i < curr->child_cnt ; i++)
evaluate_tree(curr->children[i]) ; //재귀형으로 현재노드정보를 계산 한다.
switch ( curr->rno_used ) {
// S -> E (0)
// E -> E + T (1) E -> E - T (2) E -> T (3)
// T -> T * F (4) T-> T / F (5) T -> F (6)
// F -> ( E ) (7) F -> num (8)
case 0: curr->val = curr->children[0]->val; // S -> E (0)
break;
case 1: curr->val = curr->children[0]->val + curr->children[2]->val;// E -> E + T
break;
case 2: curr->val = curr->children[0]->val - curr->children[2]->val;//E -> E - T
break;
case 3: curr->val = curr->children[0]->val;// E -> T
break;
case 4: curr->val = curr->children[0]->val * curr->children[2]->val;// T -> T * F
break;
case 5: curr->val = curr->children[0]->val / curr->children[2]->val;// T-> T / F
break;
case 6: curr->val = curr->children[0]->val;// T -> F
break;
case 7: curr->val = curr->children[1]->val;//F -> ( E )
break;
case 8: curr->val = curr->children[0]->nodesym.data ; // 토큰이 자식 노드가 되는 경우임.
break; // F -> num
} // switch.
} // else
} // end of evaluate_tree
// 난터미널심볼의 번호 : S (0), E(1), T(2), F(3)
// 터미널심볼의 번호 : + (0), - (1), * (2), / (3), ( (4), ) (5), num (6), $ (7)
void viewstackinfo(void) //현재스택의 정보를 표시한다.
{
int i;
char c;
for(i=0 ; i<=top ; i++){
if(!stack[i]->nodesym.kind){ //터미널일경우
switch(stack[i]->nodesym.no) //해당심볼의 번호대로 문자로 치환한다.
{
case 0: c='+';break;
case 1: c='-';break;
case 2: c='*';break;
case 3: c='/';break;
case 4: c='(';break;
case 5: c=')';break;
case 6: c='N';break;
case 7: c='$';break;
default:c='\0';break;
}//switch end
printf("[%c]",c);//스택문자출력
}
else{
switch(stack[i]->nodesym.no) //해당심볼의 번호대로 문자로 치환한다.
{
case 0: c='S';break;
case 1: c='E';break;
case 2: c='T';break;
case 3: c='F';break;
default:c='\0';break;
}//switch end
if(i%2)printf("[%c]",c); //스택문자출력
else printf("[%d]",stack[i]->state); //스테이트정보일경우 표기한다.
}
}
}
3. LR파싱을 이용하여 계산하는 프로그램을 작성한다.
4. 실행결과
5. discussion
LL파싱에서 만든 메인부분과 lexan을 이용하여 LR계산기를 만들어 보았는데 소스코드를 분석하는데
많은 시간이 소요된것 같습니다. 특히 트리를 생성하는 구조에 대해서 이해하는데 많은시간이 걸렸는데
링크드리스트로 만드는 트리이외에도 이렇게 트리구조를 만들 수 있다는것을 처음으로 알았습니다.

키워드

LR파싱,   계산기,   프로그램,   C언어,   LR,   LR parser,   parser,   ACTION
  • 가격2,000
  • 페이지수9페이지
  • 등록일2007.04.09
  • 저작시기2006.5
  • 파일형식한글(hwp)
  • 자료번호#402957
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니