1
0

run.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "__virtualmath.h"
  2. #define printResult(result, first, last) do{ \
  3. switch (result.value->value->type){ \
  4. case number: \
  5. printf("%s %ld %s \n", first, result.value->value->data.num.num, last); \
  6. break; \
  7. case string: \
  8. printf("%s %s %s \n", first, result.value->value->data.str.str, last); \
  9. break; \
  10. default: \
  11. printf("%s default %s \n", first, last); \
  12. break; \
  13. } \
  14. } while(0) \
  15. Result getBaseVar(INTER_FUNCTIONSIG) {
  16. Result times, result;
  17. int int_times;
  18. if (st->u.base_var.times == NULL){
  19. int_times = 0;
  20. goto not_times;
  21. }
  22. times = iterStatement(CALL_INTER_FUNCTIONSIG(st->u.base_var.times, var_list));
  23. int_times = (int)times.value->value->data.num.num;
  24. not_times:
  25. result.value = findFromVarList(st->u.base_var.name, var_list, int_times);
  26. if (result.value == NULL){
  27. printf("not found[%s]\n", st->u.base_var.name);
  28. }
  29. return result;
  30. }
  31. /**
  32. * 运行但个statement
  33. * @param st
  34. * @param inter
  35. * @param var_list
  36. * @return
  37. */
  38. Result runStatement(INTER_FUNCTIONSIG) {
  39. Result result;
  40. setResult(&result, true, inter);
  41. switch (st->type) {
  42. case base_value:
  43. result.value->value = st->u.base_value.value;
  44. break;
  45. case base_var:
  46. result = getBaseVar(CALL_INTER_FUNCTIONSIG(st, var_list));
  47. break;
  48. case operation:
  49. result = operationStatement(CALL_INTER_FUNCTIONSIG(st, var_list));
  50. printResult(result, "operation result = ", "");
  51. break;
  52. default:
  53. break;
  54. }
  55. return result;
  56. }
  57. /**
  58. * 局部程序运行statement
  59. * @param st
  60. * @param inter
  61. * @param var_list
  62. * @return
  63. */
  64. Result iterStatement(INTER_FUNCTIONSIG) {
  65. Result result;
  66. Statement *base_st = st;
  67. VarList *new_var_list = var_list;
  68. while(base_st != NULL){
  69. result = runStatement(CALL_INTER_FUNCTIONSIG(base_st, new_var_list));
  70. base_st = base_st->next;
  71. }
  72. return result;
  73. }
  74. /**
  75. * 全局程序运行statement
  76. * @param inter
  77. * @return
  78. */
  79. Result globalIterStatement(Inter *inter) {
  80. Result result;
  81. Statement *base_st = inter->statement;
  82. VarList *new_var_list = inter->var_list;
  83. while(base_st != NULL){
  84. result = runStatement(CALL_INTER_FUNCTIONSIG(base_st, new_var_list));
  85. base_st = base_st->next;
  86. }
  87. return result;
  88. }