in Compiler Design edited by
6 votes
The syntax of the repeat-until statement is given by the following grammar

$S \rightarrow\text{ repeat }S_1\text{ until }E$

where E stands for expressions, $S$ and $S_1$ stand for statements. The non-terminals $S$ and $S_1$ have an attribute code that represents generated code. The non-terminal E has two attributes. The attribute code represents generated code to evaluate the expression and store its 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 repeat-until 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.
in Compiler Design edited by

1 comment

No one was able to answer this question?

Subscribe to GO Classes for GATE CSE 2022

1 Answer

5 votes
Best answer

The desired code sequence is 

    if(E.varName = 1) goto;
    goto S.begin;

The following syntax-directed translation can achieve this (As mentioned in question "\\" is used to concatenate two strings)

  • S.begin := newlabel()
  • := newlabel()
  • S.code := gen(S.begin:) \\ S1.code \\ E.code \\ gen(if(E.varName = 1 goto \\ gen(goto S.begin) \\ gen(
selected by

1 comment

404 please update the link

Related questions