Чтение онлайн

на главную - закладки

Жанры

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

extern int strcmp(const char*, const char*);

extern char* strcpy(char*, const char*);

name* look(char* p, int ins = 0)

{

 int ii= 0;

 char *pp = p;

 while (*pp) ii = ii‹‹1 ^ *pp++;

 if (ii ‹ 0) ii = -ii;

 ii %= TBLSZ;

 for (name* n=table [ii]; n; n=n-›next)

if (strcmp(p,n-›string) == 0) return n;

 if (ins == 0) error("name not found");

 name* nn = new name;

 nn-›string = new char[strlen(p) + 1];

 strcpy(nn-›string,p);

 nn-›value = 1;

 nn-›next = table[ii];

 table[ii] = nn;

 return nn;

}

inline name* insert(char* s) { return look (s,1); }

token_value get_token;

double term;

double expr

{

 double left = term;

 for (;;)

switch (curr_tok) {

case PLUS:

get_token;

left += term;

break;

case MINUS:

get_token;

left -= term;

break;

default:

return left;

}

}

double prim;

double term

{

 double left = prim;

 for (;;)

switch (curr_tok) {

case MUL:

get_token;

left *= prim;

break;

case DIV:

get_token;

double d = prim;

if (d == 0) return error("divide by 0");

left /= d;

break;

default:

return left;

}

}

int number_value;

char name_string[80];

double prim

{

 switch (curr_tok) {

 case NUMBER:

get_token;

return number_value;

 case NAME:

if (get_token == ASSIGN) {

name* n = insert(name_string);

get_token;

n-›value = expr;

return n-›value;

}

return look(name_string)-›value;

 case MINUS:

get_token;

return -prim;

 case LP:

get_token;

double e = expr;

if (curr_tok != RP) return error(") expected");

get_token;

return e;

 case END:

return 1;

 default:

return error ("primary expected");

 }

}

token_value get_token

{

 char ch = 0;

 do {

if (!cin.get(ch)) return curr_tok = END;

 } while (ch !='\n' && isspace(ch));

 switch (ch) {

 case ';':

 case '\n':

cin ›› WS;

return curr_tok=PRINT;

 case '*':

 case '/':

 case '+':

 case '-':

 case '(':

 case ')':

 case '=':

return curr_tok=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;

return curr_tok=NUMBER;

 default:

if (isalpha(ch)) {

char* p = name_string;

*p++ = ch;

while (cin.get(ch) && isalnum(ch)) *p++ = ch;

cin.putback(ch);

*p = 0;

return curr_tok=NAME;

}

error ("bad token");

return curr_tok=PRINT;

 }

}

int main(int argc, char* argv[])

{

Поделиться:
Популярные книги

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Искра Силы

Шабынин Александр
1. Мир Бессмертных
Фантастика:
городское фэнтези
историческое фэнтези
сказочная фантастика
фэнтези
эпическая фантастика
5.00
рейтинг книги
Искра Силы

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Кодекс Крови. Книга ХIII

Борзых М.
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIII

Единственная для невольника

Новикова Татьяна О.
Любовные романы:
любовно-фантастические романы
5.67
рейтинг книги
Единственная для невольника

Черный Баламут. Трилогия

Олди Генри Лайон
Черный Баламут
Фантастика:
героическая фантастика
5.00
рейтинг книги
Черный Баламут. Трилогия

Муассанитовая вдова

Катрин Селина
Федерация Объединённых Миров
Фантастика:
космическая фантастика
7.50
рейтинг книги
Муассанитовая вдова

Страж Кодекса. Книга IV

Романов Илья Николаевич
4. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IV

Советник 2

Шмаков Алексей Семенович
7. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Советник 2

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс

Чехов. Книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
альтернативная история
5.00
рейтинг книги
Чехов. Книга 3

Третье правило дворянина

Герда Александр
3. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Третье правило дворянина