다음 상태를 나타냅니다.
0: 분석 중
1: 읽기/
2: 두 번째/,"// ...
3: 읽기 "/* ...
4: 읽기 "/* ... *
5: 첫 번째 읽기 "
6: 이스케이프 문자 읽기 ... \
7: 설명 찾기
0 과 7 은 동등한 상태이지만, 7 가지 상태로 특별한 일을 할 수 있습니다. 예를 들어, 이 시점에서 새로 발견된 댓글을 삭제할 수 있습니다. 최종 절차는 다음과 같습니다. c 파일로 출력하는 것이 더 편리합니다.
#' stdio.h' 포함
# 문자열 포함
Char FSM [8] [128];
Void initfsm ()
{
Const intline _ len = sizeof (char) *128;
Memset(fsm[0], 0, line _ len);
Memset(fsm[ 1], 0, line _ len);
Memset(fsm[2], 2,line _ len);
Memset(fsm[3], 3, 라인 _ len);
Memset(fsm[4], 3, line _ len);
Memset(fsm[5], 5, line _ len);
Memset(fsm[6], 5, 라인 _ len);
Memset(fsm[7], 0, 라인 _ len);
Fsm [0] ['/'] =1;
Fsm [0] ['"'] = 5;
Fsm [1] ['/'] = 2;
Fsm [1] ['*'] = 3;
Fsm [1] ['"'] = 5;
Fsm [2] ['\ n'] = 7;
Fsm [3] ['*'] = 4;
Fsm [4] ['/'] = 7;
Fsm [4] ['*'] = 4;
Fsm [5] ['"'] = 0;
Fsm [5] ['\ \'] = 6;
Fsm [7] ['/'] =1;
Fsm [7] ['"'] = 5;
}
Int main ()
{
Intstate = 0;
Char c;;
Std:: strings;
FILE *fin=fopen("e:\\in.txt ","r ");
FILE *fout=fopen("e:\\out.txt ","w ");
Initfsm ();
While(fscanf(fin, "%c", & ampc)! =EOF)
{
상태 = FSM [상태] [c];
S+= c;
스위치 (상태)
{
시나리오 0:
Fprintf(fout, "%s", s.c _ str ());
S =
깨뜨리다
시나리오 7:
S =
If(c=='\n')
{
Fputc(c, fout);
}
깨뜨리다
}
}
Fclose (fin);
Fclose (fout);
0 을 반환합니다
}