Программирование >>  Формирование пользовательского контейнера 

1 ... 119 120 121 [ 122 ] 123 124 125 ... 156


void eval eзф4(int &value) {

char op; char temp;

op = \0*; if(*token == + II *token == - II *token == INC II *token == DEC)

temp = *token; op = *token; get token(); if(temp == INC)

assign vcir (token, f ind var (token) +1); if(temp == DEC)

assign var(token, find var(token)-1);

eval eзф5 (value) ;

if(op == -) value = -(value);

Обрабатывает вьгражение со скобками.

void eval eзф5 (int &value)

if((*token == ()) { get token();

eval eзфO (value); получает подвьгражение

if(*token != )*)

throw InterpExc(PAREN EXPECTED); get token();

else

atom(value);

Находит значение числа, переменной или функции.



void atom(int &value) {

int i;

char temp[MAX ID LEN+ll;

switch(token type) { case IDENTIFIER:

i = intemal func(token) ; if(i != -1) {

Вызывает функцию стандартной библиотеки ( standard library ).

value = (* intem f unc [ i ]. p) (); }

else if(find func(token)) {

Вызывает функцию, созданную программистом.

call();

value = ret value;

else {

value = find var(token); получает значение переменной strcpy(temp, token); сохраняет имя переменной

Проверяет операции ++ или -. get token();

if(*token == INC II *token == DEC) { if(*token == INC)

assign vcar(temp, find var(temp)+1); else

assign var(temp, find var(temp)-1); } else putbackO;

get token(); return;

case NUMBER: числовая константа value = atoi(token); get token();

return;

case DELIMITER: проверяет, не символьная ли константа



374 Гяаеа£

if(*token == \ ) { value = *prog;

prog++;

if (*prog! = \ )

throw InterpExc(QUOTE EXPECTED); prog++; get token();

return ;

if (*token==) ) return; обрабатьшает пустое вьцэажение else throw InterpExc(SYNTAX); иначе синтаксическая ошибка default:

throw InterpExc(SYNTAX); синтаксическая ошибка

Отображает сообщение об ошибке, void sntx err (error insg error) {

char *p, *tenp; int linecount = 0;

static char *e[]= { Syntcix error , No eзфression present , Not a variable , Duplicate variable name , Duplicate function name , Semicolon expected , Unbalanced braces , Function undefined , Type specifier expected , Return without call , Parentheses expected , While expected ,

Closing quote expected ,

Division by zero ,

{ eзфected (control statements must use blocks) .



1 ... 119 120 121 [ 122 ] 123 124 125 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика