Syntax-Directed-Translation
Question 1 |
Suppose we have a computer with a single register and only three instructions given below:
LOAD addren ; load register
; from addren
STORE addren ; store register
; at addren
ADD addren ; add register to
; contents of addren
; and place the result
; in the register
Consider the following grammar:
A → id :=E E → E + T|T T → (E)|id
Write a syntax directed translation to generate code using this grammar for the computer described above.
Theory Explanation. |
Question 2 |
Consider the syntax-directed translation schema (SDTS) shown below:
E → E + E {print “+”}
E → E ∗ E {print “.”}
E → id {print id.name}
E → (E)
An LR-parser executes the actions associated with the productions immediately after a reduction by the corresponding production. Draw the parse tree and write the translation for the sentence.
(a+b)∗(c+d), using the SDTS given above.
Theory Explanation. |
Question 3 |
The syntax of the repeat-until statement is given by the gollowing grammar
S → repeat S1 until E
Where E stands for expressions, S and S1 stand for statement. The non-terminals S and S1 have an attribute code that represents generated code. The nonterminal E has two attributes. The attribute code represents generated code to evaluate the expression and store its truth value in a distinct variable, and the attribute varName contains the name of the variable in which the truth value is stored? The truth-value stored in the variable is 1 if E is true, 0 if E is false.
Give a syntax-directed definition to generate three-address code for the repeatuntil statement. Assume that you can call a function newlabel( ) that returns a distinct label for a statement. Use the operator ‘\\’ to concatenate two strings and the function gen(s) to generate a line containing the string s.
Theory Explanation is given below. |
