Higher Study | Compiler Design | Syntax Directed Translation

The above mentioned picture shows the:­
Consider the following grammar (that admits a series of declarations, followed by expressions) and the associated syntax directed translation (SDT) actions, given as pseudo-code: P → D* E* D → int ID {record that ID.lexeme is of type int} D → bool ID { record that ID.lexeme is of type bool} E → E1 + E2 {check that E1.type = E2.type = int; set E.type := int} E → !E1 {check that E1.type = bool; set E.type := bool} E → ID {set E.type := int} With respect to the above grammar; which one of the following choices is correct?
Consider the following grammar and the semantic actions to support the inherited type declaration attributes. Let X1, X2, X3, X4, X5 and X6 be the placeholders for the non-terminals D, T, L or L1 in the following table: Production rule Semantic action D → T L X1.type = X2.type T → int T.type = int T → float T.type = float L → L1, id X3.type = X4.type addType(id.entry, X5.type) L → id addType(id.entry, X6.type)   Which one of the following are the appropriate choices for X1, X2, X3 and X4?
Ads