목차
없음
본문내용
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\');
}
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\');
}
소개글