어휘 분석기
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 숙제의 주제를 기술

2. 문제 해결을 위한 개략적 방법을 제시

3. 세부 문제에 대한 구체적인 해결 방안 제시

4. 실험

5. 실험 결과 평가

6. 구현 프로그램의 문제점과 개선 방안제시

본문내용

리는 글자와 카운터
fp = fopen("conver.c", "r");
if(fp == NULL)
{
printf("파일이 열리지 않았습니다. \n");
exit(1);
}
root = NULL;
for(i = 0 ; i < MAX ; i++)
str[i] = NULL;
i = 0;
while((c = getc(fp)) != EOF)
{
if(c != '\n')
{
if(isalpha(c))
{
str[i] = c;
i++;
}
else
{
i = 0;
if(str[0] != NULL)
{
root = insertTREE(root, str, w_num, l_num);
w_num++;
for(j = 0 ; j < MAX ; j++)
str[j] = NULL;
}
}
}
else
{
l_num++;
w_num = 1;
}
}
return root;
}
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++)
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)
pwalk = pwalk->left;
else
{
if(strcmp(new->data, pwalk->data) > 0)
pwalk = pwalk->right;
else
{
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;
}
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;
}
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;
}
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++;
}
printf("\n");
return;
}
● conver.c
1 #include
2 int main(void)
3 {
4 char c = '\377';
5 int j = c;
6 int i= c&0377;
7
8 printf("%d \n", j);
9 printf("%d\n", i);
10 return 0;
11 }
② 시스템의 컴파일 및 실행 환경
unix
③ 실행 파일
scanner.c
conver.c
④ 실행 결과
5. 실험 결과 평가
실행 결과를 보면 알파벳 순서로 출력되는 것을 볼 수 있고, 알파벳 출력과 동시에 단어가 위치하고 있는 Line의 수와 Line에서의 몇 번째에 단어가 존재하는지를 출력하고 있다.
만약에 반복되어서 단어가 존재 할 경우에도 그 단어가 또 어디에 존재하는지도 출력되었다.
6. 구현 프로그램의 문제점과 개선 방안제시
결과를 보면 모든 토큰들이 다 출력되는 것을 볼 수 있다. 하지만 이것을 조금 개선해서 심볼 테이블에 저장 되어있는 단어들을 search 형식으로, 즉 단어장 검색과 비슷하게 텍스트 파일 안에서 찾고자 하는 단어를 검색하면 그 단어만 찾아서 몇 째 줄에 위치하는지만 보여주면 더욱 깔끔하고, 보기 좋은 프로그램이 될 것 같다.
  • 가격2,000
  • 페이지수10페이지
  • 등록일2012.02.29
  • 저작시기2012.1
  • 파일형식한글(hwp)
  • 자료번호#730958
본 자료는 최근 2주간 다운받은 회원이 없습니다.
  • 편집
  • 내용
  • 가격
청소해
다운로드 장바구니