statement.c 2.2 KB

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