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

소개글

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

목차

없음

본문내용

ex = 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주간 다운받은 회원이 없습니다.
다운로드 장바구니