Bird
Raised Fist0
Compiler Designknowledge~20 mins

Three-address code in Compiler Design - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Three-address code Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the structure of three-address code

Which of the following best describes the format of a typical three-address code instruction?

AAn instruction with at most three addresses: one for the result and two for the operands
BAn instruction with exactly three operands and no result address
CAn instruction with four addresses: two for results and two for operands
DAn instruction with one address for the result and one operand only
Attempts:
2 left
💡 Hint

Think about how many variables or values are involved in a typical operation.

📋 Factual
intermediate
2:00remaining
Purpose of three-address code in compilation

What is the main purpose of generating three-address code during the compilation process?

ATo provide a low-level machine code directly executable by hardware
BTo serve as an intermediate representation that simplifies optimization and code generation
CTo replace the source code with a high-level language equivalent
DTo encrypt the source code for security during compilation
Attempts:
2 left
💡 Hint

Consider the role of intermediate code between source code and machine code.

🔍 Analysis
advanced
2:00remaining
Analyzing three-address code for a given expression

Given the arithmetic expression a = b + c * d, which of the following is the correct sequence of three-address code instructions?

Aa = b * c * d
Ba = b + c<br>a = a * d
Ct1 = b + c<br>a = t1 * d
Dt1 = c * d<br>a = b + t1
Attempts:
2 left
💡 Hint

Remember operator precedence: multiplication before addition.

❓ Comparison
advanced
2:00remaining
Comparing three-address code and quadruples

Which statement correctly distinguishes three-address code from quadruples in compiler design?

AQuadruples are a high-level language, three-address code is machine code
BThree-address code always uses four operands, quadruples use three
CThree-address code is a textual representation, while quadruples use a fixed four-field structure for each instruction
DThree-address code cannot represent conditional jumps, quadruples can
Attempts:
2 left
💡 Hint

Think about how instructions are formatted and stored.

❓ Reasoning
expert
2:00remaining
Determining the number of three-address code instructions

Consider the expression x = (a + b) * (c - d) / e. How many three-address code instructions are needed to compute this expression assuming each binary operation is one instruction?

A4
B5
C6
D7
Attempts:
2 left
💡 Hint

Break down the expression into individual operations and count them.

Practice

(1/5)
1. What is the main purpose of three-address code in compiler design?
easy
A. To execute machine code directly on hardware
B. To break complex instructions into simpler steps with at most three parts
C. To store source code in a compressed format
D. To replace high-level language syntax with natural language

Solution

  1. Step 1: Understand the role of intermediate code

    Intermediate code like three-address code simplifies complex instructions for easier processing.
  2. Step 2: Identify the key feature of three-address code

    It breaks instructions into steps with at most three parts (two operands and one result).
  3. Final Answer:

    To break complex instructions into simpler steps with at most three parts -> Option B
  4. Quick Check:

    Three-address code = simple 3-part instructions [OK]
Hint: Three-address code simplifies instructions into three parts [OK]
Common Mistakes:
  • Confusing three-address code with machine code
  • Thinking it compresses source code
  • Believing it replaces programming languages
2. Which of the following is a correct example of a three-address code instruction?
easy
A. if a > b goto L1 else goto L2
B. while (a < b) { a = a + 1; }
C. print(a, b, c)
D. t1 = a + b

Solution

  1. Step 1: Identify the format of three-address code

    It typically has one operator and up to two operands, assigning result to a temporary variable.
  2. Step 2: Check each option

    t1 = a + b matches the format: one operator (+), two operands (a, b), and a result (t1). Others are control flow or high-level statements.
  3. Final Answer:

    t1 = a + b -> Option D
  4. Quick Check:

    Three-address code = one operator, two operands, one result [OK]
Hint: Look for one operator and two operands with a result variable [OK]
Common Mistakes:
  • Choosing control flow statements as three-address code
  • Confusing function calls with three-address code
  • Ignoring the assignment to a temporary variable
3. Given the three-address code:
t1 = a + b
t2 = t1 * c
d = t2 - e

What is the final value assigned to d in terms of a, b, c, e?
medium
A. (a + b) * c - e
B. a + b * c - e
C. a + (b * c) - e
D. (a + b) - (c * e)

Solution

  1. Step 1: Evaluate intermediate expressions step-by-step

    t1 = a + b; then t2 = t1 * c = (a + b) * c; finally d = t2 - e = (a + b) * c - e.
  2. Step 2: Substitute and simplify

    The final expression for d is (a + b) * c - e, matching (a + b) * c - e.
  3. Final Answer:

    (a + b) * c - e -> Option A
  4. Quick Check:

    Follow code stepwise = (a + b) * c - e [OK]
Hint: Follow temporary variables stepwise to build final expression [OK]
Common Mistakes:
  • Ignoring parentheses changing operation order
  • Multiplying b by c before adding a
  • Mixing subtraction order
4. Identify the error in this three-address code snippet:
t1 = a + b
t2 = t1 *
d = t2 - e
medium
A. Missing operand after '*' operator in second line
B. Incorrect use of temporary variables
C. Assignment to 'd' should be before 't2'
D. No error, code is correct

Solution

  1. Step 1: Examine the second line syntax

    The second line ends with '*' operator but lacks the second operand after '*', which is invalid.
  2. Step 2: Confirm other lines are correct

    First and third lines have proper assignments and operands; only second line has syntax error.
  3. Final Answer:

    Missing operand after '*' operator in second line -> Option A
  4. Quick Check:

    Operator must have two operands [OK]
Hint: Check each operator has two operands in three-address code [OK]
Common Mistakes:
  • Ignoring incomplete operator usage
  • Thinking variable order causes error
  • Assuming code is correct without checking syntax
5. How would you represent the high-level statement if (a < b) c = a + b; else c = a - b; in three-address code?
hard
A. if a < b then c = a + b else c = a - b
B. c = a + b if a < b else c = a - b
C. if a < b goto L1
c = a - b
goto L2
L1: c = a + b
L2:
D. t1 = a < b
c = t1 ? a + b : a - b

Solution

  1. Step 1: Translate conditional jump

    Use 'if a < b goto L1' to jump to true branch, else execute false branch.
  2. Step 2: Write false branch, jump over true branch

    False branch: c = a - b; then jump to L2 to skip true branch.
  3. Step 3: Write true branch and label

    Label L1: c = a + b; Label L2 marks end of conditional.
  4. Final Answer:

    if a < b goto L1
    c = a - b
    goto L2
    L1: c = a + b
    L2:
    -> Option C
  5. Quick Check:

    Use labels and jumps for if-else in three-address code [OK]
Hint: Use labels and jumps to represent if-else in three-address code [OK]
Common Mistakes:
  • Writing high-level if-else syntax directly
  • Using ternary operator not valid in three-address code
  • Missing jump to skip true branch after false branch
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard