Token Parsing을 이용한 계산기 구현
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

Token Parsing을 이용한 계산기 구현에 대한 보고서 자료입니다.

목차

없음

본문내용

= ToVar(bufindex-1);
if(varList.Find(tempvarname))
{
temp = varList.Find_value(tempvarname);
Number.push(temp);
}
else if(!varList.Find(tempvarname)) Error(4);
Get_next_token();
}
else Error(1);
}
int Process::Get_next_token()
{
while(buffer[bufindex]!='\0')
{
if('0'<=buffer[bufindex]&& buffer[bufindex] <= '9')
{
token = NUMBER;
bufindex++;
return 0;
}
else if('a'<=buffer[bufindex]&& buffer[bufindex] <= 'z')
{
token = ID;
bufindex++;
return 0;
}
else if('A'<=buffer[bufindex]&& buffer[bufindex] <= 'Z')
{
token = ID;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '=')
{
token = ASSN;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '+')
{
token = PLUS;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '-')
{
token = MINUS;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '*')
{
token = STAR;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '/')
{
token = MUL;
bufindex++;
return 0;
}
else if(buffer[bufindex] == '(')
{
token = LP;
bufindex++;
return 0;
}
else if(buffer[bufindex] == ')')
{
token = RP;
bufindex++;
return 0;
}
else if(buffer[bufindex] == ' ' || buffer[bufindex] == '\t' || buffer[bufindex] == '\n')
{
bufindex++;
}
else
{
Error(1);
}
}
bufindex++;
return 0;
}
void Process::Parsing()
{
errchk = NO;
assignchk = ASSNNO;
helpchk = HELPNO;
for(int a=0; buffer[a] != '\0'; a++)
{
if(buffer[a] == '=') assignchk = ASSNYES;
else if(buffer[a] == '?') helpchk = HELPYES;
}
if(helpchk == HELPYES) Help(); // ' ? ' 입력시 도움말을 보여줌
else if(strcmp("history",buffer))
{
if(assignchk == ASSNYES) // ID 입력, Assign 입력을 받았을 때 작업
{
Get_next_token();
Assign();
Expr();
varList.Insert_value(assnvar,Number.top());
}
else if(assignchk == ASSNNO) // 일반 수식 계산
{
Get_next_token();
Expr();
}
// Error가 없을 경우 결과값을 출력한다.
if(errchk == NO && assignchk == ASSNNO)
cout << "Result : " << Number.pop() << endl;
else if(errchk ==NO && assignchk == ASSNYES)
cout << "Result : " << assnvar << " = " << Number.pop() << endl;
}
else if(!strcmp("history",buffer)) // "history" 입력되었을 경우
{
if(varList.Is_Empty()) cout << "Empty list." << endl;
else
varList.VarPRT();
}
}
int Process::Tonumber(int index) // 입력된 문자열에서 Number(char 형)를 int형으로 변환
{
int number;
char asciinum[30];
int j;
for(j = 0; '0' <= buffer[index] && buffer[index] <= '9'; index++,j++)
{
asciinum[j] = buffer[index];
}
asciinum[j] = '\0';
number = atoi(asciinum);
Number.push(number);
return index;
}
int Process::ToVar(int index) // 입력된 문자열에서 ID를 Variable Name으로 변환
{
char varname[11];
int j;
for(j = 0;
('a' <= buffer[index] && buffer[index] <= 'z') ||
('A' <= buffer[index] && buffer[index] <= 'Z')
; index++,j++)
{
varname[j] = buffer[index];
}
varname[j] = '\0';
strcpy(tempvarname,varname);
return index;
}
void main(void){
clrscr();
InputExp In;
Process ProcessIn;
char YesNo;
do{
In.setExp(); // Expression을 입력 받는다.
ProcessIn.getExp(In.getExp()); // Expression을 버퍼에 저장한 후
ProcessIn.Parsing(); // Parsing 작업을 통해 값을 계산한다.
cout << "Do you want to continue? ..... (Y/N)";
cin >> YesNo;
}while(YesNo == 'Y' || YesNo == 'y');
}

키워드

토큰,   파싱,   계산기,   token,   parsing,   c++
  • 가격1,000
  • 페이지수14페이지
  • 등록일2006.12.07
  • 저작시기2006.12
  • 파일형식한글(hwp)
  • 자료번호#380925
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니