Advertisement
gavrilo93

Vezbe8 PP

Dec 9th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. program
  2. :global_list function_list
  3. ;
  4. global_list
  5. : /*empty/*
  6. |global_list global_var
  7. ;
  8. global_var
  9. :type _ID _SEMICOLON
  10. ........... }
  11. // attr = -1, tako je najbolje
  12. // moze i uvoditi novi kind, mada je bolje attr = -1
  13.  
  14. void lookup_symbol() -- promeni, vrv je to bolje od menjanja insert_symbol
  15.  
  16. ----------generisanje koda---------------------
  17. menjaj
  18. print_symbol(int index){
  19. if (index> -1){
  20. // n*4(%14)
  21. if ((get_kind(index) == VAR) && (get_attr(index)!= no_ATTR))
  22. code("-%d(%%14)", get_attr(index)*4);
  23. }
  24. }
  25.  
  26. -----------------------------------------------------------------------------------------------
  27. LOG:
  28. Vezba8 Log:
  29. zadatak 1:
  30. ...........sintax........
  31. // globalna promenljiva je van funkcij
  32. program => globVarList function list
  33. => globVar list ili prazno
  34. =>globVar type _ID
  35. // sintax ok
  36. ..........semantic...............
  37. //treba da ubacimo u listu simbola
  38. //atribut -1 (samo -1 ili idemo dalje -2, -3....)
  39. //unutar funkcije prvo ce se traziti lokalna i to nema potrebe da podesavamo
  40. //isto ime za lokalnu i globalnu promenljivu? kako resiti konflikt?
  41. //izbacuje gresku da je lokalna promenljiva vec definisana, mozda pri proveri, proveravati da li je i attr -1?
  42. //promeniti insert_symbol?
  43. ---------------------------------------------------------------------------------------
  44. resenje1:
  45. //ne prepoznaje gresku ako se dve glob varijable isto zovu
  46. prepravili smo insert_symbol u symtab.c
  47. int insert_symbol(char *name, unsigned kind, unsigned type, int attr){
  48. int index;
  49. if( (index = lookup_symbol(name, kind)) == -1 )
  50. index = insert_sym(name, kind, type, attr);
  51. else {
  52. if (get_attr(index) == -1){
  53. index = insert_sym(name, kind, type, attr);
  54. }else
  55. err("redefinition of '%s'", name);
  56. }
  57. return index;
  58. }
  59. //i u micko.y
  60. globVar
  61. :type _ID _SEMICOLON
  62. {
  63. insert_symbol($2, VAR, $1, -1);
  64. }
  65. ;
  66. ---------------------------------------------------------------------------------------
  67. njihovo resenje:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement