Bird
Raised Fist0
Compiler Designknowledge~20 mins

Syntax-directed translation in Compiler Design - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Syntax-directed Translation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
What is the primary role of syntax-directed translation in a compiler?

Consider the process of compiling a program. What is the main purpose of syntax-directed translation?

ATo optimize the machine code generated by the compiler
BTo manage memory allocation during program execution
CTo parse the source code and detect syntax errors only
DTo associate semantic actions with grammar rules to produce intermediate code or perform semantic checks
Attempts:
2 left
💡 Hint

Think about how semantic meaning is attached to the structure of the source code.

📋 Factual
intermediate
2:00remaining
Which component typically executes semantic actions in syntax-directed translation?

In syntax-directed translation, which part of the compiler is responsible for executing the semantic actions attached to grammar rules?

ASymbol table manager
BLexical analyzer
CSyntax analyzer (parser)
DCode generator
Attempts:
2 left
💡 Hint

Semantic actions are usually triggered during the parsing process.

🔍 Analysis
advanced
2:00remaining
What is the output of this syntax-directed translation snippet?

Given the grammar rule and semantic action below, what will be the value of val after parsing the input 3 + 4?

Compiler Design
E -> E1 + T { E.val = E1.val + T.val }
T -> digit { T.val = digit.lexval }

Input tokens: 3 + 4
A7
B34
CSyntax error
DUndefined value
Attempts:
2 left
💡 Hint

Consider how the semantic action computes the value by adding the values of subexpressions.

❓ Comparison
advanced
2:00remaining
How do synthesized attributes differ from inherited attributes in syntax-directed translation?

Compare synthesized and inherited attributes in the context of syntax-directed translation.

ASynthesized attributes are computed from children nodes up to the parent; inherited attributes are passed from parent to children
BSynthesized attributes are passed from parent to children; inherited attributes are computed from children to parent
CBoth are computed only at the leaves of the parse tree
DSynthesized attributes are used only for error detection; inherited attributes are used for code generation
Attempts:
2 left
💡 Hint

Think about the direction of information flow in the parse tree.

❓ Reasoning
expert
3:00remaining
Why might a syntax-directed translation scheme with only synthesized attributes be easier to implement than one with inherited attributes?

Consider the complexity of implementing syntax-directed translation schemes. Why is a scheme using only synthesized attributes generally simpler to implement than one that also uses inherited attributes?

ABecause inherited attributes require no semantic rules, making them harder to track
BBecause synthesized attributes can be evaluated in a single bottom-up traversal of the parse tree, while inherited attributes may require multiple passes or more complex evaluation orders
CBecause synthesized attributes do not depend on grammar rules, while inherited attributes do
DBecause inherited attributes are only used in lexical analysis, not in syntax-directed translation
Attempts:
2 left
💡 Hint

Think about how attribute values propagate in the parse tree and how that affects evaluation order.

Practice

(1/5)
1. What is the main purpose of syntax-directed translation in compiler design?
easy
A. To manage memory allocation during runtime
B. To optimize machine code for faster execution
C. To check syntax errors in source code
D. To associate grammar rules with actions for translation

Solution

  1. Step 1: Understand the role of syntax-directed translation

    It connects grammar rules with specific actions or computations to translate source code.
  2. Step 2: Differentiate from other compiler tasks

    Unlike optimization or error checking, it focuses on translation based on syntax structure.
  3. Final Answer:

    To associate grammar rules with actions for translation -> Option D
  4. Quick Check:

    Syntax-directed translation = associate grammar with actions [OK]
Hint: Focus on linking grammar rules to translation actions [OK]
Common Mistakes:
  • Confusing translation with optimization
  • Thinking it only checks syntax errors
  • Assuming it manages runtime memory
2. Which of the following is the correct way to write a semantic rule in syntax-directed translation for an expression E -> E1 + T that computes the value of E?
easy
A. val(E) = val(E1) * val(T)
B. E = E1 + T
C. E.val = E1.val + T.val
D. E.val = E1.val - T.val

Solution

  1. Step 1: Identify the semantic rule for addition

    The rule should compute the value of E by adding values of E1 and T.
  2. Step 2: Match the correct syntax for semantic rules

    Using E.val = E1.val + T.val correctly assigns the computed value.
  3. Final Answer:

    E.val = E1.val + T.val -> Option C
  4. Quick Check:

    Semantic rule for addition uses '+' operator [OK]
Hint: Semantic rules use attribute assignments like X.val = ... [OK]
Common Mistakes:
  • Using assignment without '.val' attributes
  • Using wrong operators like '*' or '-'
  • Writing rules as expressions without assignment
3. Given the grammar rule and semantic actions:
E -> E1 + T { E.val = E1.val + T.val }
T -> digit { T.val = digit.lexval }
What is the value of E.val for input 3 + 5?
medium
A. 8
B. 35
C. Error
D. 0

Solution

  1. Step 1: Evaluate terminal values

    For digits 3 and 5, digit.lexval gives 3 and 5 respectively.
  2. Step 2: Apply semantic rule for addition

    Using E.val = E1.val + T.val, compute 3 + 5 = 8.
  3. Final Answer:

    8 -> Option A
  4. Quick Check:

    3 + 5 = 8 [OK]
Hint: Add digit values as per semantic rules [OK]
Common Mistakes:
  • Concatenating digits as strings (35)
  • Assuming syntax error without reason
  • Returning zero without calculation
4. Identify the error in the following semantic rule for the grammar E -> E1 + T:
{ E.val = E1.val - T.val }
medium
A. Missing attribute assignment for E1
B. Wrong operator used; should be addition instead of subtraction
C. Semantic rule should be outside braces
D. No error; rule is correct

Solution

  1. Step 1: Check grammar operation

    The grammar rule uses '+' operator, so semantic rule must reflect addition.
  2. Step 2: Identify mismatch in semantic action

    The semantic rule uses '-', which contradicts the grammar's '+' operator.
  3. Final Answer:

    Wrong operator used; should be addition instead of subtraction -> Option B
  4. Quick Check:

    Operator in semantic rule must match grammar [OK]
Hint: Semantic operator must match grammar operator [OK]
Common Mistakes:
  • Ignoring operator mismatch
  • Thinking braces placement causes error
  • Assuming missing attribute assignment
5. Consider a syntax-directed translation scheme that computes the value of arithmetic expressions with addition and multiplication:
E -> E1 + T { E.val = E1.val + T.val }
E -> T { E.val = T.val }
T -> T1 * F { T.val = T1.val * F.val }
T -> F { T.val = F.val }
F -> digit { F.val = digit.lexval }

What is the computed value of 2 + 3 * 4 using this scheme?
hard
A. 14
B. 20
C. 24
D. Error due to ambiguity

Solution

  1. Step 1: Apply operator precedence in grammar

    Multiplication (T -> T1 * F) has higher precedence than addition (E -> E1 + T).
  2. Step 2: Compute multiplication first

    Calculate 3 * 4 = 12, then add 2: 2 + 12 = 14.
  3. Final Answer:

    14 -> Option A
  4. Quick Check:

    Multiplication before addition = 14 [OK]
Hint: Multiply before adding as per grammar rules [OK]
Common Mistakes:
  • Adding before multiplying (2+3=5, then 5*4=20)
  • Multiplying all digits (2*3*4=24)
  • Assuming ambiguity error
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