statement.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include<stdio.h>
  2. #include "interpreter.h"
  3. statement *make_statement(){ // make statement
  4. statement *tmp;
  5. tmp = malloc(sizeof(statement)); // get an address for base var
  6. tmp->next = NULL;
  7. tmp->type = start;
  8. return tmp;
  9. }
  10. statement *append_statement(statement *base_statement, statement *new_tmp){ // make statement next
  11. statement *tmp = base_statement; // iter var
  12. while(1){
  13. if (tmp->next == NULL){ // not var name *name
  14. break;
  15. }
  16. tmp = tmp->next; // get the next to iter
  17. }
  18. tmp->next = new_tmp;
  19. return new_tmp;
  20. }
  21. statement_list *make_statement_list(){ // make a empty var_list node
  22. statement_list *tmp;
  23. tmp = malloc(sizeof(statement_list)); // get an address for base var
  24. tmp->next = NULL;
  25. tmp->statement_base = NULL;
  26. return tmp;
  27. }
  28. statement_list *make_statement_base(statement *gloabl_code){
  29. statement_list *tmp = make_statement_list();
  30. tmp->statement_base = gloabl_code;
  31. return tmp;
  32. }
  33. statement_list *append_statement_list(statement *statement_base, statement_list *statment_list_base){ // make var_list[FILO]
  34. statement_list *tmp = make_statement_list();
  35. tmp->statement_base = statement_base;
  36. tmp->next = statment_list_base;
  37. return tmp;
  38. }
  39. statement *find_statement_list(int from, statement_list *statment_list_base){ // find var by func get_var in var_list[iter to find]
  40. statement_list *start = statment_list_base;
  41. for(int i = 0;i < from;i+= 1){
  42. if(start->next == NULL){
  43. break;
  44. }
  45. start = start->next;
  46. }
  47. return start->statement_base;
  48. }
  49. statement_list *free_statement_list(statement_list *statment_list_base){ // make var_list[FILO]
  50. statement_list *tmp = statment_list_base->next;
  51. if(tmp != NULL){
  52. free(statment_list_base);
  53. return tmp;
  54. }
  55. return statment_list_base;
  56. }