#include <stdio.h>
#include <string.h>
#define MAX_PARSING 200
int count=0;
void main()
{
FILE *input = fopen("input.txt","r"); //input 데이터를 읽어옴
int line,i,j,k=0; //논터미널 갯수
char result[20];
char start[20];
char non[20][20]; //non 터미널 읽는다.
char parser[20][20];
fscanf(input,"%d",&line); //전이 횟수
fscanf(input,"%s",start); //스타트 심벌
fscanf(input,"%s",result); //결과값
printf("=============Parsing Program=============\n");
printf("=========================================\n");
printf("=========================================\n");
printf("=========================================\n");
printf("=========================================\n");
printf("==============================2011.11.16=\n");
printf("\n===============Paser start===============\n");
printf("Start - > ($%s,%s$)\n",start,result);
printf("=================Grammer=================\n");
for(i=0 ; i<line ; i++) //파싱 grammer을 저장함
{
fscanf(input,"%s",non[i]);
fscanf(input,"%s",parser[i]);
printf("%s->%s\n",non[i],parser[i]);
}
printf("==========Parsing .........ing===========\n");
printf("($%s,%s$)\n",start,result);
while(1)
{
if(strcmp(start,non[k])==0) //넌터미널을 비교
{
if(parser[k][0]==result[0]) //결과값과 같다면
{
strcpy(&start,parser[k]); //start에 grammer를 복사
if(start<97)
strcpy(&start,parser[k]); //복사
printf("($%s,%s$)\n",start,result);
for(j=0 ; j<strlen(&start) ; j++) //현재과정을 팝시킴
start[j]=start[j+1];
for(j=0 ; j<strlen(&result) ; j++) //결과를 팝시킴
result[j]=result[j+1];
j--;
printf("($%s,%s$)\n",start,result);
}
}
count++; //파싱횟수
k=k+1; //논터미널을 계속 비교
if(k>6) // 논터미널이 끝이면 다시 처음부터
k=0;
if(strcmp(start,result)==0) // 파싱이 완료되었으면
{
printf("Accept!!\n");
printf("==========Parsing .........end===========\n");
break;
}
if(count==MAX_PARSING) // 파싱횟수가 최대횟수를 넘으면 에러메시지를 띄우고 종료
{
if(strcmp(start,"S")==0) // 맨마지막남은 파싱 S가 입실론이면 accept
{
printf("($ε,$)\n");
printf("($,$)\n");
printf("Accept!!\n");
printf("==========Parsing .........end===========\n");
break;
}
printf("=========Parsing .........error==========\n");
break;
}
}
fclose(input); // 파일입력을 닫아줌.
}
굵은글씨에서 오류발생하는데 왜그러는지아심?ㅠ
댓글 0