Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. #include "structures.h"
  2. #include "semantics.h"
  3. #include "symbol_table.h"
  4. #include <stdio.h>
  5.  
  6. int check_program(is_program* p) {
  7. int errorcount=0;
  8. errorcount=check_vardec_list(p->vlist);
  9. errorcount+=check_statement_list(p->slist);
  10. return errorcount;
  11. }
  12.  
  13. int check_vardec_list(is_vardec_list* ivl) {
  14. int errorcount=0;
  15. is_vardec_list* tmp;
  16.  
  17. for(tmp=ivl; tmp; tmp=tmp->next){
  18. errorcount+=check_vardec(tmp->val);
  19. }
  20. return errorcount;
  21. }
  22.  
  23. int check_vardec(is_vardec* iv) {
  24. switch(iv->disc_d) {
  25. case d_integer:
  26. return check_integer_dec(iv->data_vardec.u_integer_dec);
  27. case d_character:
  28. return check_character_dec(iv->data_vardec.u_character_dec);
  29. case d_double:
  30. return check_double_dec(iv->data_vardec.u_double_dec);
  31. }
  32. return 0;
  33. }
  34.  
  35. int check_integer_dec(is_integer_dec* iid) {
  36. table_element* newel=insert_el(iid->id, integer);
  37.  
  38. if(newel==NULL) {
  39.  
  40. printf("Symbol %s already defined! line: %d\tcol: %d\n", iid->id, iid->line, iid->col);
  41. return 1;
  42. }
  43. return 0;
  44. }
  45.  
  46. int check_character_dec(is_character_dec* icd) {
  47. table_element* newel=insert_el(icd->id, character);
  48.  
  49. if(newel==NULL) {
  50. printf("Symbol %s already defined! line: %d\tcol: %d\n", icd->id, icd->line, icd->col);
  51. return 1;
  52. }
  53. return 0;
  54. }
  55.  
  56. int check_double_dec(is_double_dec* idd) {
  57. table_element* newel=insert_el(idd->id, doub);
  58.  
  59. if(newel==NULL) {
  60. printf("Symbol %s already defined! line: %d\tcol: %d\n", idd->id, idd->line, idd->col);
  61. return 1;
  62. }
  63. return 0;
  64. }
  65.  
  66. int check_statement_list(is_statement_list* isl) {
  67. int errorcount=0;
  68. is_statement_list* tmp;
  69.  
  70. for(tmp=isl; tmp; tmp=tmp->next)
  71. errorcount+=check_statement(tmp->val);
  72. return errorcount;
  73. }
  74.  
  75.  
  76. int check_statement(is_statement* is) {
  77. switch(is->disc_d) {
  78. case d_write: return check_write_statement(is->data_statement.u_write_statement);
  79. }
  80. }
  81.  
  82. int check_write_statement(is_write_statement* iws) {
  83. table_element* aux=search_el(iws->id);
  84.  
  85. if(aux==NULL) {
  86. printf("Symbol %s not declared! line: %d\tcol: %d\n", iws->id, iws->line, iws->col);
  87. return 1;
  88. }
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement