[컴파일러, Compiler] Lex & Yacc 를 이용한 Parser Report
본 자료는 2페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
해당 자료는 2페이지 까지만 미리보기를 제공합니다.
2페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 설명 및 algorithm

2. List

3. 결 과

본문내용

;
exit(1);
}
void symbol_reverse(void) /* parsing table의 값을 거꾸로 stack에 넣음 */
{
int s = 0;
int f = 0;
while(reverse[f]!='\0'){
f++;
}
f--;
for( ; f >= s; f--){
push(reverse[f]);
}
}
void parser(void) /*parsing table과 연결시켜 input을 parsing한다.*/
{
while(temp != '$'){ /* stack이 empty일 때까지 반복*/
temp = top_val();
if((temp=='c')||(temp=='+')||(temp=='(')||(temp=='*')||(temp==')')){
/* top이 terminal */
if(temp == token){
pop();
token = yylex();
}
else error();
}
else if((temp=='E')||(temp=='e')||(temp=='T')||(temp=='t')||(temp=='F')){
/* top이 nonterminal */
switch(temp){
case 'E': non_tml = 0; break;
case 'e': non_tml = 1; break;
case 'T': non_tml = 2; break;
case 't': non_tml = 3; break;
case 'F': non_tml = 4; break;
}
switch(token){
case 'c': in_sym = 0; break;
case '+': in_sym = 1; break;
case '*': in_sym = 2; break;
case '(': in_sym = 3; break;
case ')': in_sym = 4; break;
case '$': in_sym = 5; break;
}
if(parsing_table[non_tml][in_sym][0]=='e'){
/*parsing table에서 ε에 대한 것*/
pop();
printf("%c -> empty\n",temp);
}
else if(parsing_table[non_tml][in_sym][0]=='c'){
/*output에서 id로 표현*/
pop();
strcpy(reverse,parsing_table[non_tml][in_sym]);
symbol_reverse();
printf("%c -> id\n",temp);
}
else{ /*그 이외의 경우를 처리*/
pop();
strcpy(reverse,parsing_table[non_tml][in_sym]);
symbol_reverse();
printf("%c -> %s\n",temp,parsing_table[non_tml][in_sym]);
}
}
}
if((temp=='$')&&(token=='$')){ /* input과 stack이 모두 비어있는 경우 */
printf("Parsing Completed!\n");
getch();
exit(1);
}
else error();
}
3. 결 과

키워드

  • 가격1,000
  • 페이지수7페이지
  • 등록일2009.03.18
  • 저작시기2008.6
  • 파일형식한글(hwp)
  • 자료번호#523712
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니