示例#1
0
文件: parser.c 项目: rrizun/littlec
/* 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 */
  }
}
示例#2
0
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); /* синтаксическая ошибка */
	}
}
示例#4
0
文件: c.c 项目: bsmr-misc-forks/kroc
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); 
    }
}
示例#5
0
文件: test1.c 项目: nminoru/misc
void
call_internal_func1(void)
{
    printf("%s at %s\n", __func__, __FILE__);
    internal_func();
}