목차
없음
본문내용
s 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 ) {
case 0: curr->val = curr->children[0]->val; break;
case 1: curr->val = curr->children[0]->val + curr->children[2]->val; break;
case 2: curr->val = curr->children[0]->val - curr->children[2]->val; break;
case 3: curr->val = curr->children[0]->val; break;
case 4: curr->val = curr->children[0]->val * curr->children[2]->val; break;
case 5: curr->val = curr->children[0]->val / curr->children[2]->val; break;
case 6: curr->val = curr->children[0]->val; break;
case 7: curr->val = curr->children[1]->val; break;
case 8: curr->val = curr->children[0]->nodesym.data ; // 토큰이 자식 노드가 되는 경우임.
break; // F -> num
} // switch.
} // else
} // end of evaluate_tree
// input parameter state: if it is >=0, it is to push a state number.
// if -1, it is to push a grammar symbol.
void push (n_ptr stack [100], sym psymbol, int state ) {
n_ptr newnode ;
newnode = (n_ptr) malloc ( sizeof (struct nodetype) ) ; // 트리 노드 하나를 배정 받음.
newnode->state = state ;
if (state == -1)
newnode -> nodesym = psymbol ; // grammer 심볼을 저장
top++ ;
stack [top] = newnode ; // 새 노드에 대한 포인터를 스택에 밀어 넣음.
} // end of push.
<실행결과>
저번 과제인 LL_calcuator를 프로그래밍하고 나서 한 이 과제는 그렇게 어렵지 않았습니다.
하지만 아직은 action table과 goto table 에 대한 개념을 더 이해해야 할 것 같습니다.
기말고사 파이팅!!!
// 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 ) {
case 0: curr->val = curr->children[0]->val; break;
case 1: curr->val = curr->children[0]->val + curr->children[2]->val; break;
case 2: curr->val = curr->children[0]->val - curr->children[2]->val; break;
case 3: curr->val = curr->children[0]->val; break;
case 4: curr->val = curr->children[0]->val * curr->children[2]->val; break;
case 5: curr->val = curr->children[0]->val / curr->children[2]->val; break;
case 6: curr->val = curr->children[0]->val; break;
case 7: curr->val = curr->children[1]->val; break;
case 8: curr->val = curr->children[0]->nodesym.data ; // 토큰이 자식 노드가 되는 경우임.
break; // F -> num
} // switch.
} // else
} // end of evaluate_tree
// input parameter state: if it is >=0, it is to push a state number.
// if -1, it is to push a grammar symbol.
void push (n_ptr stack [100], sym psymbol, int state ) {
n_ptr newnode ;
newnode = (n_ptr) malloc ( sizeof (struct nodetype) ) ; // 트리 노드 하나를 배정 받음.
newnode->state = state ;
if (state == -1)
newnode -> nodesym = psymbol ; // grammer 심볼을 저장
top++ ;
stack [top] = newnode ; // 새 노드에 대한 포인터를 스택에 밀어 넣음.
} // end of push.
<실행결과>
저번 과제인 LL_calcuator를 프로그래밍하고 나서 한 이 과제는 그렇게 어렵지 않았습니다.
하지만 아직은 action table과 goto table 에 대한 개념을 더 이해해야 할 것 같습니다.
기말고사 파이팅!!!
소개글