123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "__virtualmath.h"
- #define printResult(result, first, last) do{ \
- switch (result.value->value->type){ \
- case number: \
- printf("%s %ld %s \n", first, result.value->value->data.num.num, last); \
- break; \
- case string: \
- printf("%s %s %s \n", first, result.value->value->data.str.str, last); \
- break; \
- default: \
- printf("%s default %s \n", first, last); \
- break; \
- } \
- } while(0) \
- Result getBaseVar(INTER_FUNCTIONSIG) {
- Result times, result;
- int int_times;
- if (st->u.base_var.times == NULL){
- int_times = 0;
- goto not_times;
- }
- times = iterStatement(CALL_INTER_FUNCTIONSIG(st->u.base_var.times, var_list));
- int_times = (int)times.value->value->data.num.num;
- not_times:
- result.value = findFromVarList(st->u.base_var.name, var_list, int_times);
- if (result.value == NULL){
- printf("not found[%s]\n", st->u.base_var.name);
- }
- return result;
- }
- /**
- * 运行但个statement
- * @param st
- * @param inter
- * @param var_list
- * @return
- */
- Result runStatement(INTER_FUNCTIONSIG) {
- Result result;
- setResult(&result, true, inter);
- switch (st->type) {
- case base_value:
- result.value->value = st->u.base_value.value;
- break;
- case base_var:
- result = getBaseVar(CALL_INTER_FUNCTIONSIG(st, var_list));
- break;
- case operation:
- result = operationStatement(CALL_INTER_FUNCTIONSIG(st, var_list));
- printResult(result, "operation result = ", "");
- break;
- default:
- break;
- }
- return result;
- }
- /**
- * 局部程序运行statement
- * @param st
- * @param inter
- * @param var_list
- * @return
- */
- Result iterStatement(INTER_FUNCTIONSIG) {
- Result result;
- Statement *base_st = st;
- VarList *new_var_list = var_list;
- while(base_st != NULL){
- result = runStatement(CALL_INTER_FUNCTIONSIG(base_st, new_var_list));
- base_st = base_st->next;
- }
- return result;
- }
- /**
- * 全局程序运行statement
- * @param inter
- * @return
- */
- Result globalIterStatement(Inter *inter) {
- Result result;
- Statement *base_st = inter->statement;
- VarList *new_var_list = inter->var_list;
- while(base_st != NULL){
- result = runStatement(CALL_INTER_FUNCTIONSIG(base_st, new_var_list));
- base_st = base_st->next;
- }
- return result;
- }
|