Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program
- :global_list function_list
- ;
- global_list
- : /*empty/*
- |global_list global_var
- ;
- global_var
- :type _ID _SEMICOLON
- ........... }
- // attr = -1, tako je najbolje
- // moze i uvoditi novi kind, mada je bolje attr = -1
- void lookup_symbol() -- promeni, vrv je to bolje od menjanja insert_symbol
- ----------generisanje koda---------------------
- menjaj
- print_symbol(int index){
- if (index> -1){
- // n*4(%14)
- if ((get_kind(index) == VAR) && (get_attr(index)!= no_ATTR))
- code("-%d(%%14)", get_attr(index)*4);
- }
- }
- -----------------------------------------------------------------------------------------------
- LOG:
- Vezba8 Log:
- zadatak 1:
- ...........sintax........
- // globalna promenljiva je van funkcij
- program => globVarList function list
- => globVar list ili prazno
- =>globVar type _ID
- // sintax ok
- ..........semantic...............
- //treba da ubacimo u listu simbola
- //atribut -1 (samo -1 ili idemo dalje -2, -3....)
- //unutar funkcije prvo ce se traziti lokalna i to nema potrebe da podesavamo
- //isto ime za lokalnu i globalnu promenljivu? kako resiti konflikt?
- //izbacuje gresku da je lokalna promenljiva vec definisana, mozda pri proveri, proveravati da li je i attr -1?
- //promeniti insert_symbol?
- ---------------------------------------------------------------------------------------
- resenje1:
- //ne prepoznaje gresku ako se dve glob varijable isto zovu
- prepravili smo insert_symbol u symtab.c
- int insert_symbol(char *name, unsigned kind, unsigned type, int attr){
- int index;
- if( (index = lookup_symbol(name, kind)) == -1 )
- index = insert_sym(name, kind, type, attr);
- else {
- if (get_attr(index) == -1){
- index = insert_sym(name, kind, type, attr);
- }else
- err("redefinition of '%s'", name);
- }
- return index;
- }
- //i u micko.y
- globVar
- :type _ID _SEMICOLON
- {
- insert_symbol($2, VAR, $1, -1);
- }
- ;
- ---------------------------------------------------------------------------------------
- njihovo resenje:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement