목차
없음
본문내용
중복 기입을 피하고 등가항들이 연쇄적으로 대체되는 것을 고려하여 eqv_list의 홀수번째 항 중
가장 큰 값을 가지는(max_num, max) 순서대로 대체한다. *?
void final_state_table(Chart imp_chart[MAX][MAX])
{
int row, col, i, j, k, max_num;
// max_num ->연쇄 등가항을 고려..가장 먼저 제거될 state의 no
char eqv_list[21];
// 등가항 리스트 배열. 홀수항 : 대체될... , 짝수항 : 삭제될...등가항
char max; // 연쇄 등가항 고려... 가장 먼저 제거될 ps
char *c; // 등가항 중복을 피하기 위해 사용하는 포인터
for(row = 1,j=0; state[row] != NULL ; row++)
for(col = 0 ; col < row ; col++)
if(imp_chart[row][col].iseqv != 'X')
for(i = 0; i < 2 ; i++)
if(imp_chart[row][col].eqv[i][0] != '\0'){
if((c=strchr(eqv_list,imp_chart[row][col].eqv[i][0])) != NULL)
if(*++c == imp_chart[row][col].eqv[i][1])
continue;
// 등가 리스트의 중복을 피하기 위해
eqv_list[j++] = imp_chart[row][col].eqv[i][0];
eqv_list[j++] = imp_chart[row][col].eqv[i][1];
}
eqv_list[j+1] = eqv_list[j] = NULL;
// 가장 먼저 제거될 등가항을 찾기위해...
for(count = 0 ; count < (j+1)/2 ; count++){
for(i = 1, max_num = 1, max = 'a'; i < j ; i += 2){
max_num = (max < eqv_list[i]) ? i : max_num;
max = (max < eqv_list[i]) ? eqv_list[i] : max;
}
delete_eqv_state(eqv_list, max_num);
}
state_resort();
}
void proc_imp_chart(char *source_fname)
{
Chart imp_chart[MAX][MAX];
init_input(source_fname);
print_state_num();
mk_imp_chart(imp_chart);
step_imp_chart(imp_chart);
final_state_table(imp_chart);
print_final_state_table();
}
void main(int argc, char *argv[])
{
if(argc <= 1)
do{
printf("/nfilename input : ");
}while(!scanf("%s",argv[1]));
proc_imp_chart(argv[1]);
}
< 등가항 제거를 위한 implication chart 구성과 진행 >
가장 큰 값을 가지는(max_num, max) 순서대로 대체한다. *?
void final_state_table(Chart imp_chart[MAX][MAX])
{
int row, col, i, j, k, max_num;
// max_num ->연쇄 등가항을 고려..가장 먼저 제거될 state의 no
char eqv_list[21];
// 등가항 리스트 배열. 홀수항 : 대체될... , 짝수항 : 삭제될...등가항
char max; // 연쇄 등가항 고려... 가장 먼저 제거될 ps
char *c; // 등가항 중복을 피하기 위해 사용하는 포인터
for(row = 1,j=0; state[row] != NULL ; row++)
for(col = 0 ; col < row ; col++)
if(imp_chart[row][col].iseqv != 'X')
for(i = 0; i < 2 ; i++)
if(imp_chart[row][col].eqv[i][0] != '\0'){
if((c=strchr(eqv_list,imp_chart[row][col].eqv[i][0])) != NULL)
if(*++c == imp_chart[row][col].eqv[i][1])
continue;
// 등가 리스트의 중복을 피하기 위해
eqv_list[j++] = imp_chart[row][col].eqv[i][0];
eqv_list[j++] = imp_chart[row][col].eqv[i][1];
}
eqv_list[j+1] = eqv_list[j] = NULL;
// 가장 먼저 제거될 등가항을 찾기위해...
for(count = 0 ; count < (j+1)/2 ; count++){
for(i = 1, max_num = 1, max = 'a'; i < j ; i += 2){
max_num = (max < eqv_list[i]) ? i : max_num;
max = (max < eqv_list[i]) ? eqv_list[i] : max;
}
delete_eqv_state(eqv_list, max_num);
}
state_resort();
}
void proc_imp_chart(char *source_fname)
{
Chart imp_chart[MAX][MAX];
init_input(source_fname);
print_state_num();
mk_imp_chart(imp_chart);
step_imp_chart(imp_chart);
final_state_table(imp_chart);
print_final_state_table();
}
void main(int argc, char *argv[])
{
if(argc <= 1)
do{
printf("/nfilename input : ");
}while(!scanf("%s",argv[1]));
proc_imp_chart(argv[1]);
}
< 등가항 제거를 위한 implication chart 구성과 진행 >
소개글