Bird
Raised Fist0
Compiler Designknowledge~5 mins

Parser conflicts (shift-reduce, reduce-reduce) in Compiler Design - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a shift-reduce conflict in parsing?
A shift-reduce conflict happens when a parser can either shift (read more input) or reduce (apply a grammar rule) at the same point, and it is unclear which action to take.
Click to reveal answer
beginner
What is a reduce-reduce conflict in parsing?
A reduce-reduce conflict occurs when a parser can apply two different grammar rules (reductions) at the same point, and it cannot decide which one to use.
Click to reveal answer
intermediate
Why do parser conflicts occur?
Parser conflicts occur because the grammar is ambiguous or not clear enough, causing the parser to have multiple valid choices at the same point in the input.
Click to reveal answer
intermediate
How can shift-reduce conflicts be resolved?
Shift-reduce conflicts can be resolved by rewriting the grammar to remove ambiguity, using precedence rules, or by choosing to always shift or always reduce in specific cases.
Click to reveal answer
intermediate
What is the difference between shift-reduce and reduce-reduce conflicts?
Shift-reduce conflicts involve a choice between reading more input (shift) or applying a rule (reduce). Reduce-reduce conflicts involve a choice between two different rules to apply (two reduces).
Click to reveal answer
What does a shift action mean in parsing?
AReading the next input symbol
BApplying a grammar rule
CStopping the parser
DIgnoring the input
Which conflict involves choosing between two possible grammar rule applications?
ALexical conflict
BShift-reduce conflict
CReduce-reduce conflict
DNo conflict
What is a common cause of parser conflicts?
ACorrect grammar
BFast computer
CLarge input files
DAmbiguous grammar
How can shift-reduce conflicts be resolved?
ABy rewriting grammar or using precedence rules
BBy ignoring the conflict
CBy increasing input size
DBy using a slower parser
In a shift-reduce conflict, what are the two possible parser actions?
AShift or accept
BShift or reduce
CReduce or accept
DIgnore or reject
Explain what causes shift-reduce and reduce-reduce conflicts in parsers and how they differ.
Think about the parser's choices at a conflict point.
You got /4 concepts.
    Describe methods to resolve parser conflicts and why resolving them is important.
    Consider how to make the parser's choices clear.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is a shift-reduce conflict in parser design?

      easy
      A. When the parser cannot decide whether to read more input or apply a grammar rule
      B. When the parser cannot decide which token to read next
      C. When the parser cannot decide between two different grammar rules to apply
      D. When the parser fails to recognize any input token

      Solution

      1. Step 1: Understand shift and reduce actions

        In parsing, 'shift' means reading the next input token, and 'reduce' means applying a grammar rule to replace tokens with a non-terminal.
      2. Step 2: Define shift-reduce conflict

        A shift-reduce conflict happens when the parser must choose between shifting (reading more input) or reducing (applying a rule) but cannot decide which is correct.
      3. Final Answer:

        When the parser cannot decide whether to read more input or apply a grammar rule -> Option A
      4. Quick Check:

        Shift-reduce conflict = choice between shift or reduce [OK]
      Hint: Shift-reduce = choose between reading input or applying rule [OK]
      Common Mistakes:
      • Confusing shift-reduce with reduce-reduce conflict
      • Thinking it is about token recognition
      • Assuming it means parser failure
      2.

      Which of the following is a correct way to describe a reduce-reduce conflict?

      easy
      A. The parser cannot decide which of two grammar rules to apply at the same point
      B. The parser cannot decide whether to shift or reduce
      C. The parser cannot decide which token to shift next
      D. The parser cannot decide how to tokenize the input

      Solution

      1. Step 1: Understand reduce actions

        Reduce means applying a grammar rule to replace a sequence of tokens with a non-terminal symbol.
      2. Step 2: Define reduce-reduce conflict

        A reduce-reduce conflict occurs when the parser has two or more possible grammar rules to reduce by and cannot decide which one to apply.
      3. Final Answer:

        The parser cannot decide which of two grammar rules to apply at the same point -> Option A
      4. Quick Check:

        Reduce-reduce conflict = choice between two reductions [OK]
      Hint: Reduce-reduce = conflict between two possible reductions [OK]
      Common Mistakes:
      • Mixing reduce-reduce with shift-reduce conflict
      • Thinking it involves token shifting
      • Confusing it with lexical analysis errors
      3.

      Consider a parser encountering the input tokens id + id * id. If the grammar causes a shift-reduce conflict at the * token, what is the typical parser action to resolve this conflict?

      medium
      A. Reject the input due to ambiguity
      B. Reduce immediately before reading the * token
      C. Shift the * token to read more input before reducing
      D. Ignore the * token and continue

      Solution

      1. Step 1: Understand operator precedence in parsing

        Multiplication (*) has higher precedence than addition (+), so the parser should process id * id before adding.
      2. Step 2: Resolve shift-reduce conflict by shifting

        At the * token, the parser shifts (reads) the * to handle multiplication first, delaying reduction of addition.
      3. Final Answer:

        Shift the * token to read more input before reducing -> Option C
      4. Quick Check:

        Shift to handle higher precedence operator first [OK]
      Hint: Shift on higher precedence operator to avoid premature reduce [OK]
      Common Mistakes:
      • Reducing too early ignoring operator precedence
      • Rejecting input unnecessarily
      • Skipping tokens instead of shifting
      4.

      Given a grammar that causes a reduce-reduce conflict, what is a common way to fix this issue?

      medium
      A. Add more tokens to the input stream
      B. Rewrite the grammar to remove ambiguity between rules
      C. Ignore one of the conflicting rules during parsing
      D. Increase the parser's stack size

      Solution

      1. Step 1: Identify cause of reduce-reduce conflict

        Reduce-reduce conflicts arise from ambiguous grammar where two rules can apply at the same point.
      2. Step 2: Fix by rewriting grammar

        To fix, rewrite or refactor the grammar to remove ambiguity so only one rule applies at a time.
      3. Final Answer:

        Rewrite the grammar to remove ambiguity between rules -> Option B
      4. Quick Check:

        Remove ambiguity to fix reduce-reduce conflict [OK]
      Hint: Fix reduce-reduce by rewriting ambiguous grammar [OK]
      Common Mistakes:
      • Trying to fix by adding tokens
      • Ignoring conflicting rules without fixing grammar
      • Changing parser stack size which doesn't help
      5.

      You have a grammar with the following rules:
      S -> A a | B a
      A -> x
      B -> x
      Why does this grammar cause a reduce-reduce conflict when parsing input x a?

      hard
      A. Because S has no valid productions
      B. Because the parser cannot decide whether to shift a or reduce x
      C. Because a is missing from the input
      D. Because both A and B can reduce x, causing ambiguity

      Solution

      1. Step 1: Analyze the grammar rules

        Both A and B produce the same token x. So when the parser sees x, it can reduce it to either A or B.
      2. Step 2: Identify reduce-reduce conflict

        At the point of reducing x, the parser cannot decide which rule to apply, causing a reduce-reduce conflict.
      3. Final Answer:

        Because both A and B can reduce x, causing ambiguity -> Option D
      4. Quick Check:

        Same input reduces to two rules = reduce-reduce conflict [OK]
      Hint: Same input reduces to multiple rules causes reduce-reduce conflict [OK]
      Common Mistakes:
      • Confusing shift-reduce with reduce-reduce conflict
      • Thinking input is missing tokens
      • Assuming no valid productions exist
      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