count가 정의가 안되있는게 논리오류인가요??
#include "std_lib_facilities.h"
class Token{
public:
char kind;
double value;
};
class Token_stream{
public:
void putback(Token t);
Token get();
private:
bool full{ false };
Token buffer;
};
void Token_stream::putback(Token t){
buffer = t;
full = true;
}
Token Token_stream::get(){
if (full){
full = false;
return buffer;
}
char ch;
double d = LONG_MAX;
cin >> ch;
switch (ch){
case 'q':
case ';':
case'(': case')': case'+': case'-': case'*': case'/':
return Token{ ch };
case'_':
case'0': case'1': case'2': case'3': case'4':
case'5': case'6': case'7': case'8': case'9':
{
cin.putback(ch);
cin >> d;
return Token{ '8', d };
}
}
}
Token_stream ts;
double [removed]); // 전방 선언(오류 방지를 위해 미리 선언해 주는 것
double primary() {
Token t = ts.get();
double d = LONG_MAX;
switch (t.kind){
case '(':
d = [removed]);
t = ts.get();
if (t.kind != ')') error(" ')'가 와야함");
return d;
case '8':
return t.value;
defalut:
error("잘못된 primary 입력");
}
}
double term() {
double left = primary();
double d = LONG_MAX;
Token t = ts.get();
while (true){
switch (t.kind){
case '*':
left *= primary();
t = ts.get();
break;
case '/':
d = primary();
if (d == 0) error("0으로 나눔");
left /= d;
t = ts.get();
break;
default:
ts.putback(t);
return left;
}
}
}
double [removed]){
double left = term();
Token t = ts.get();
while (true){
switch (t.kind){
case '+':
left += term();
t = ts.get();
break;
case '-':
left -= term();
t = ts.get();
break;
default:
ts.putback(t);
return left;
}
}
}
int main(){
double d;
while (cin){
Token t = ts.get();
if (t.kind == 'q') break;
if (t.kind == ';')
cout << "=" << d << '\n';
else
ts.putback(t);
d = [removed]);
}
return 0;
}
댓글 0