/* Find value of number, variable or function. */ void atom(int *value) { int i; switch(token_type) { case IDENTIFIER: i = internal_func(token); if(i!= -1) { /* call "standard library" function */ *value = (*intern_func[i].p)(); } else if(find_func(token)){ /* call user-defined function */ call(); *value = ret_value; } else *value = find_var(token); /* get var's value */ get_token(); return; case NUMBER: /* is numeric constant */ *value = atoi(token); get_token(); return; case DELIMITER: /* see if character constant */ if(*token=='\'') { *value = *prog; prog++; if(*prog!='\'') sntx_err(QUOTE_EXPECTED); prog++; get_token(); } return; default: if(*token==')') return; /* process empty expression */ else sntx_err(SYNTAX); /* syntax error */ } }
void atom(int &value) { int i; char temp[MAX_ID_LEN + 1]; switch (token_type) { case IDENTIFIER: i = internal_func(token); if (i != -1) { // Call "standard library" function. value = (*intern_func[i].p)(); } else if (find_func(token)) { // Call programmer-created function. call(); value = ret_value; } else { value = find_var(token); // get var's value strcpy(temp, token); // save variable name // Check for ++ or --. get_token(); if (*token == INC || *token == DEC) { if (*token == INC) assign_var(temp, find_var(temp) + 1); else assign_var(temp, find_var(temp) - 1); } else putback(); } get_token(); return; case NUMBER: // is numeric constant value = atoi(token); get_token(); return; case DELIMITER: // see if character constant if (*token == '\'') { value = *prog; prog++; if (*prog != '\'') throw InterpExc(QUOTE_EXPECTED); prog++; get_token(); return; } if (*token == ')') return; // process empty expression else throw InterpExc(SYNTAX); // otherwise, syntax error default: throw InterpExc(SYNTAX); // syntax error } }
/* Получение значения числа, переменной или функции. */ void atom(int *value) { int i; switch(token_type) { case IDENTIFIER: i = internal_func(token); if(i!= -1) { /* вызов функции из "стандартной билиотеки" */ *value = (*intern_func[i].p)(); } else if(find_func(token)) { /* вызов функции, определенной пользователем */ call(); *value = ret_value; } else if(arr_exists(token)) { *value = find_arr_element(token, *value); } else { *value = find_var(token); /* получение значения переменной */ } get_token(); return; case NUMBER: /* числовая константа */ *value = atoi(token); get_token(); return; case DELIMITER: /* это символьная константа? */ if(*token == '\'') { *value = *prog; prog++; if(*prog!='\'') { sntx_err(QUOTE_EXPECTED); } prog++; get_token(); return ; } if(*token==')') { return; /* обработка пустого выражения */ } else { sntx_err(SYNTAX); /* синтаксическая ошибка */ } default: sntx_err(SYNTAX); /* синтаксическая ошибка */ } }
void atom(int *value) { int i; switch(token_type) { case IDENTIFIER: i = internal_func(token); if(i!= -1) *value = (*intern_func[i].p)(); else if(find_func(token)) { call(); *value = ret_value; } else *value = find_var(token); get_token(); return; case NUMBER: *value = atoi1(token); get_token(); return; case DELIMITER: if(*token=='\'') { *value = *prog; prog++; if(*prog!='\'') sntx_err(QUOTE_EXPECTED); prog++; get_token(); } return; default: if(*token==')') return; else sntx_err(SYNTAX); } }
void call_internal_func1(void) { printf("%s at %s\n", __func__, __FILE__); internal_func(); }