목차
1. 숙제의 주제를 기술
2. 문제 해결을 위한 개략적 방법을 제시
3. 세부 문제에 대한 구체적인 해결 방안 제시
- 입력 스트림 끝의 처리
- 예약어와 식별자의 구분
- 읽기 문자를 되돌리기
4. 실험 :
- 프로그램의 소스,
- 시스템의 컴파일 및 실행 환경,
- 실행 화일,
- 실행 결과의 화면
5. 실험 결과 평가
6. 구현 프로그램의 문제점과 개선 방안 제시
2. 문제 해결을 위한 개략적 방법을 제시
3. 세부 문제에 대한 구체적인 해결 방안 제시
- 입력 스트림 끝의 처리
- 예약어와 식별자의 구분
- 읽기 문자를 되돌리기
4. 실험 :
- 프로그램의 소스,
- 시스템의 컴파일 및 실행 환경,
- 실행 화일,
- 실행 결과의 화면
5. 실험 결과 평가
6. 구현 프로그램의 문제점과 개선 방안 제시
본문내용
= '\n') //한줄의 끝이 아닐때
{
if(isalpha(c)) //영문자일때
{
str[i] = c ;
i = i + 1 ;
}
else //영문자가 아닐때
{
i = 0 ;
if(str[0] != NULL)
{
root = insertTREE(root, str, w_num, l_num) ;
w_num = w_num + 1 ;
for(j = 0 ; j < MAX ; j++)
str[j] = NULL ;
}
}
}
else //한줄의 끝일때
{
l_num = l_num + 1 ;
w_num = 1 ;
}
}
return root ;
}
//binary tree에 노드를 삽입하는 함수
struct NODE *insertTREE(struct NODE *root, char str[MAX], int w_num, int l_num)
{
struct NODE *new, *pwalk, *parent ;
int i ;
new = createNODE() ;
for(i = 0 ; i < MAX ; i++) //노드 data를 초기화
new->data[i] = str[i] ;
new->plist = insertLIST(new->plist, w_num, l_num) ;
if(root == NULL)
root = new ;
else
{
pwalk = root ; //삽입할 노드의 위치를 찾는다
while(pwalk != NULL)
{
parent = pwalk ;
if(strcmp(new->data, pwalk->data) < 0)
//삽입될 노드이 data값이 작을때
pwalk = pwalk->left ;
{
if(strcmp(new->data, pwalk->data) > 0) //삽입될 노드의 data값이 클때
pwalk = pwalk->right ;
else //data값이 같을때
{
pwalk->plist = insertLIST(pwalk->plist, w_num, l_num) ;
break ;
}
}
}
if(strcmp(new->data, parent->data) < 0) //트리에서 찾아진 위치에 노드를 삽입
parent->left = new ;
else
{
if(strcmp(new->data, parent->data) > 0)
parent->right = new ;
else
free(new) ;
}
}
return root ;
}
//트리의 노드를 생성하는 함수
struct NODE *createNODE()
{
struct NODE *temp ;
temp = (struct NODE *)malloc(sizeof(struct NODE)) ;
if(temp == NULL)
{
printf("메모리를 할당할 수 없습니다!!!!!!!!\n") ;
exit(2) ;
}
temp->plist = NULL ;
temp->left = NULL ;
temp->right = NULL ;
return temp ;
}
//linked list에 노드를 삽입하는 함수
struct LIST *insertLIST(struct LIST *plist, int w_num, int l_num)
{
struct LIST *pnew, *ppre, *ploc ;
pnew = createLIST() ;
pnew->word_num = w_num ;
pnew->line_num = l_num ;
if(plist == NULL)
plist = pnew ;
else
{
ploc = plist ;
while(ploc != NULL)
{
ppre = ploc ;
ploc = ploc->next ;
}
ppre->next = pnew ;
}
return plist ;
}
//linked list의 노드를 생성하는 함수
struct LIST *createLIST()
{
struct LIST *temp ;
temp = (struct LIST *)malloc(sizeof(struct LIST)) ;
if(temp == NULL)
{
printf("메모리를 할당할 수 없습니다!!!!!!!!\n") ;
exit(2) ;
}
temp->next = NULL ;
return temp ;
}
//inorder로 노드와 리스트를 출력하는 함수
void outputNODE(struct NODE *root)
{
if(root != NULL)
{
outputNODE(root->left) ;
printNODE(root) ;
outputNODE(root->right) ;
}
return ;
}
void printNODE(struct NODE *root)
{
printf("%-15s\t\t",root->data) ;
printLIST(root->plist) ;
return ;
}
void printLIST(struct LIST *plist)
{
int i, count = 1 ;
while(plist != NULL)
{
if((count % 6 ) == 0)
{
printf("\n") ;
for(i = 0 ; i < 15 ; i++)
printf(" ") ;
printf("\t\t") ;
count = 1 ;
}
printf("|%3d ,%2d|",plist->line_num, plist->word_num) ;
plist = plist->next ;
count = count + 1 ;
}
printf("\n");
return ;
}
5. 실험 결과 평가
이 프로그램은 scanner.c의 파일을 읽어 모든 단어들의 위치를 찾아서 binary tree로 삽입하여 출력해 내는 것입니다
6. 구현 프로그램의 문제점과 개선 방안 제시
http://blog.naver.com/lunasea94.do?Redirect=Log&logNo=1779634이란 인터넷 주소에 어휘분석기에 대하여 자세히 나와 있었고, 파일구조 시간에 8장에서 B트리를 공부하면서, 이진트리를 조금 이해 할 수 있어서, 어휘분석기를 할 수 있었지만,
군 제대후 자료구조를 공부하다고 아직 듣지 않아서인지, 방학때 자료구조를 공부해야겠다는 생각이 들었다.
지금 한글을 넣으면 어휘분석기가 되지 않는 다는 것이 문제점이며, 한글을 입력해도 어휘분석기가 돌아갈 수 있도록, 방학을 이용하여 시도해야 겠다.
{
if(isalpha(c)) //영문자일때
{
str[i] = c ;
i = i + 1 ;
}
else //영문자가 아닐때
{
i = 0 ;
if(str[0] != NULL)
{
root = insertTREE(root, str, w_num, l_num) ;
w_num = w_num + 1 ;
for(j = 0 ; j < MAX ; j++)
str[j] = NULL ;
}
}
}
else //한줄의 끝일때
{
l_num = l_num + 1 ;
w_num = 1 ;
}
}
return root ;
}
//binary tree에 노드를 삽입하는 함수
struct NODE *insertTREE(struct NODE *root, char str[MAX], int w_num, int l_num)
{
struct NODE *new, *pwalk, *parent ;
int i ;
new = createNODE() ;
for(i = 0 ; i < MAX ; i++) //노드 data를 초기화
new->data[i] = str[i] ;
new->plist = insertLIST(new->plist, w_num, l_num) ;
if(root == NULL)
root = new ;
else
{
pwalk = root ; //삽입할 노드의 위치를 찾는다
while(pwalk != NULL)
{
parent = pwalk ;
if(strcmp(new->data, pwalk->data) < 0)
//삽입될 노드이 data값이 작을때
pwalk = pwalk->left ;
{
if(strcmp(new->data, pwalk->data) > 0) //삽입될 노드의 data값이 클때
pwalk = pwalk->right ;
else //data값이 같을때
{
pwalk->plist = insertLIST(pwalk->plist, w_num, l_num) ;
break ;
}
}
}
if(strcmp(new->data, parent->data) < 0) //트리에서 찾아진 위치에 노드를 삽입
parent->left = new ;
else
{
if(strcmp(new->data, parent->data) > 0)
parent->right = new ;
else
free(new) ;
}
}
return root ;
}
//트리의 노드를 생성하는 함수
struct NODE *createNODE()
{
struct NODE *temp ;
temp = (struct NODE *)malloc(sizeof(struct NODE)) ;
if(temp == NULL)
{
printf("메모리를 할당할 수 없습니다!!!!!!!!\n") ;
exit(2) ;
}
temp->plist = NULL ;
temp->left = NULL ;
temp->right = NULL ;
return temp ;
}
//linked list에 노드를 삽입하는 함수
struct LIST *insertLIST(struct LIST *plist, int w_num, int l_num)
{
struct LIST *pnew, *ppre, *ploc ;
pnew = createLIST() ;
pnew->word_num = w_num ;
pnew->line_num = l_num ;
if(plist == NULL)
plist = pnew ;
else
{
ploc = plist ;
while(ploc != NULL)
{
ppre = ploc ;
ploc = ploc->next ;
}
ppre->next = pnew ;
}
return plist ;
}
//linked list의 노드를 생성하는 함수
struct LIST *createLIST()
{
struct LIST *temp ;
temp = (struct LIST *)malloc(sizeof(struct LIST)) ;
if(temp == NULL)
{
printf("메모리를 할당할 수 없습니다!!!!!!!!\n") ;
exit(2) ;
}
temp->next = NULL ;
return temp ;
}
//inorder로 노드와 리스트를 출력하는 함수
void outputNODE(struct NODE *root)
{
if(root != NULL)
{
outputNODE(root->left) ;
printNODE(root) ;
outputNODE(root->right) ;
}
return ;
}
void printNODE(struct NODE *root)
{
printf("%-15s\t\t",root->data) ;
printLIST(root->plist) ;
return ;
}
void printLIST(struct LIST *plist)
{
int i, count = 1 ;
while(plist != NULL)
{
if((count % 6 ) == 0)
{
printf("\n") ;
for(i = 0 ; i < 15 ; i++)
printf(" ") ;
printf("\t\t") ;
count = 1 ;
}
printf("|%3d ,%2d|",plist->line_num, plist->word_num) ;
plist = plist->next ;
count = count + 1 ;
}
printf("\n");
return ;
}
5. 실험 결과 평가
이 프로그램은 scanner.c의 파일을 읽어 모든 단어들의 위치를 찾아서 binary tree로 삽입하여 출력해 내는 것입니다
6. 구현 프로그램의 문제점과 개선 방안 제시
http://blog.naver.com/lunasea94.do?Redirect=Log&logNo=1779634이란 인터넷 주소에 어휘분석기에 대하여 자세히 나와 있었고, 파일구조 시간에 8장에서 B트리를 공부하면서, 이진트리를 조금 이해 할 수 있어서, 어휘분석기를 할 수 있었지만,
군 제대후 자료구조를 공부하다고 아직 듣지 않아서인지, 방학때 자료구조를 공부해야겠다는 생각이 들었다.
지금 한글을 넣으면 어휘분석기가 되지 않는 다는 것이 문제점이며, 한글을 입력해도 어휘분석기가 돌아갈 수 있도록, 방학을 이용하여 시도해야 겠다.