목차
1. 어휘분석기 소스코드
2. 어휘분석기 프로그램 실행화면 스크린샷
2. 어휘분석기 프로그램 실행화면 스크린샷
본문내용
din); // retract
}
break;
case '>': // state42
ch = getchar();
if (ch == '=') token.number = tgreate; // '>='
else { token.number = tgreat; // '>'
ungetc(ch, stdin); // retract
}
break;
case '|': // state45
ch = getchar();
if (ch == '|') token.number = tor; // '||'
else { lexicalError(3); // '|' 하나만 쓸수 없다는 에러 출력
ungetc(ch, stdin); // retract
}
break;
case '(': token.number = tlparen; break; // 특수문자 각각 대입
case ')': token.number = trparen; break;
case ',': token.number = tcomma; break;
case ';': token.number = tsemicolon; break;
case '[': token.number = tlbracket; break;
case ']': token.number = trbracket; break;
case '{': token.number = tlbrace; break;
case '}': token.number = trbrace; break;
case EOF: token.number = teof; break;
default: { // 상기 case에 해당 안될 경우 잘못된 문자로 인식, 에러출력
printf(" Current character : %c", ch);
lexicalError(4);
break;
}
} // switch end
} while (token.number == tnull);
return token;
} // end of scanner
void main()
{
tokenType a;
printf("스캐너에 문자열을 입력해주세요.\n");
for(;1;)
{
a = scanner();
if( a.number == 5 ) // 토큰이 숫자상수일때 토큰번호와 토큰값(상수수치 값)
printf("토큰 넘버 : %d, 토큰값 : %d \n", a.number, a.value.num);
else if ( a.number==4) // 토큰이 변수일때 토큰번호와 토큰값(변수의 스트링값)
{
printf("토큰 넘버 : %d, 토큰값 : %s\n", a.number, a.value.id);
}
else if( ((0 <= a.number) && (a.number <=3)) || ( (a.number >= 6) && (a.number <=39) ) )
// 토큰이 특수문자형태일때 또는 예약어 일때는 토큰의 토큰번호만을 출력 하기로 한다.
// enum 태그형은 프로그램 실행중에 열거 멤버의 이름을 알수 있는 방법이 없음
// 별도의 문자열 배열을 지정하면 토큰 심벌값을 출력 해줄수 있으나 생략 하겠음.
{
printf("토큰넘버 : %d \n", a.number);
}
else{} // lexicalerror(4)의 경우로 해줄일 없음.
}
}
--------------------------------------------------------------------------------------------------------------------------------------
실행결과 스크린 샷 1번
- 예약어, 변수, 상수, 특수문자들의 토큰을 추출해내는 모습
실행결과 스크린 샷 2번
- 각 에러 메시지와 출력과 특수문자 토큰을 추출 해내는 모습
}
break;
case '>': // state42
ch = getchar();
if (ch == '=') token.number = tgreate; // '>='
else { token.number = tgreat; // '>'
ungetc(ch, stdin); // retract
}
break;
case '|': // state45
ch = getchar();
if (ch == '|') token.number = tor; // '||'
else { lexicalError(3); // '|' 하나만 쓸수 없다는 에러 출력
ungetc(ch, stdin); // retract
}
break;
case '(': token.number = tlparen; break; // 특수문자 각각 대입
case ')': token.number = trparen; break;
case ',': token.number = tcomma; break;
case ';': token.number = tsemicolon; break;
case '[': token.number = tlbracket; break;
case ']': token.number = trbracket; break;
case '{': token.number = tlbrace; break;
case '}': token.number = trbrace; break;
case EOF: token.number = teof; break;
default: { // 상기 case에 해당 안될 경우 잘못된 문자로 인식, 에러출력
printf(" Current character : %c", ch);
lexicalError(4);
break;
}
} // switch end
} while (token.number == tnull);
return token;
} // end of scanner
void main()
{
tokenType a;
printf("스캐너에 문자열을 입력해주세요.\n");
for(;1;)
{
a = scanner();
if( a.number == 5 ) // 토큰이 숫자상수일때 토큰번호와 토큰값(상수수치 값)
printf("토큰 넘버 : %d, 토큰값 : %d \n", a.number, a.value.num);
else if ( a.number==4) // 토큰이 변수일때 토큰번호와 토큰값(변수의 스트링값)
{
printf("토큰 넘버 : %d, 토큰값 : %s\n", a.number, a.value.id);
}
else if( ((0 <= a.number) && (a.number <=3)) || ( (a.number >= 6) && (a.number <=39) ) )
// 토큰이 특수문자형태일때 또는 예약어 일때는 토큰의 토큰번호만을 출력 하기로 한다.
// enum 태그형은 프로그램 실행중에 열거 멤버의 이름을 알수 있는 방법이 없음
// 별도의 문자열 배열을 지정하면 토큰 심벌값을 출력 해줄수 있으나 생략 하겠음.
{
printf("토큰넘버 : %d \n", a.number);
}
else{} // lexicalerror(4)의 경우로 해줄일 없음.
}
}
--------------------------------------------------------------------------------------------------------------------------------------
실행결과 스크린 샷 1번
- 예약어, 변수, 상수, 특수문자들의 토큰을 추출해내는 모습
실행결과 스크린 샷 2번
- 각 에러 메시지와 출력과 특수문자 토큰을 추출 해내는 모습
소개글