首先是课本最早出现的源码,可以运行
#include "pch.h"
#include <iostream>
#include<string>
#include<cctype>
#include<map>
#include<sstream>
using namespace std;
enum Token_value{
NAME,NUMBER,END,
PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=';',ASSIGN='=',LP='(',RP=')'
};
Token_value curr_tok = PRINT;
int no_of_errors;
double term(bool get);
string string_value;
double number_value;
double error(const string&s)
{
no_of_errors++;
cout << "error" << s << '\n';
return 1;
}
Token_value get_token()
{
char ch = 0;
cin >> ch;
switch (ch) {
case 0:
return curr_tok = END;
case';':
case'*':
case'/':
case'+':
case'-':
case'(':
case')':
case'=':
return curr_tok = Token_value(ch);
case'0':case'1':case'2':case'3':case'4':case'5':
case'6':case'7':case'8':case'9':case'.':
cin.putback(ch);
cin >> number_value;
default:
if (isalpha(ch)) {
string_value = ch;
while (cin.get(ch) && isalnum(ch));
string_value.push_back(ch);
return curr_tok = NAME;
}
error("bad token");
return curr_tok = PRINT;
return curr_tok = NUMBER;
}
}
double expr(bool get) {
double left = term(get);
for(;;)
switch (curr_tok)
{
case PLUS:
left += term(tr