Given the following attribute grammar for type declarations, I need to be able to produce a parse tree for any given string, for example "A, B : C;", and then decorate the tree.
I can generally do this for simple attribute grammars and when its obvious what the attributes are, but I can not decipher what out_tab
and in_tab
are. Yes, this is my homework and I am not asking for the solution, I am asking for guidance on what these attributes mean and possible examples to assist me.
decl -> ID decl_tail
decl.t := decl_tail.t
decl_tail.in_tab := insert(decl,in_tab, ID.n, decl_tail.t)
decl.out_tab := decl_tail.out_tab
decl_tail -> , decl
decl_tail.t := decl.t
decl.in_tab := decl_tail.in_tab
decl_tail.out_tab := decl.out_tab
decl_tail -> : ID ;
decl_tail.t := ID.n
decl_tail.out_tab := decl_tail.in_tab
Several years after, I hope you finished well your home work :)
about your exercise:
decl.t
anddecl_tail.t
are synthetized atributes that copy the Type name (ID.n
) and pass it for each parent production in the parsing treewhen a production
decl -> ID decl_tail
is reached, thein_tab
attributte keeps a kind of list of relationship between identifiers and types (it is not clear the type ofin_tab
but we can assume a list of tuples(identifier; type)
). This attribute is inherited, so the list will start to be constructed in the top most production (leftmost identifier), and continue constructing it from left to right and finish it in the rightmost identifier.Then the list is finished to be constructed when
decl_tail -> : ID;
is reached so a synthesised attribute (out_tab
) is used to synthesise the result again to the starting symbol.this drawing was the best I could do for drawing the decorated tree and graph dependence:
Blue arrows are the synthetizing of the
t
attribute, the green arrows are how thein
list is constructed and the red arrows are how the result is synthesized to the initial symbol