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
✗ Incorrect
Shifting means the parser reads the next input symbol to continue parsing.
Which conflict involves choosing between two possible grammar rule applications?
ALexical conflict
BShift-reduce conflict
CReduce-reduce conflict
DNo conflict
✗ Incorrect
Reduce-reduce conflicts happen when the parser can apply two different reductions and must choose one.
What is a common cause of parser conflicts?
ACorrect grammar
BFast computer
CLarge input files
DAmbiguous grammar
✗ Incorrect
Ambiguous grammar causes the parser to have multiple valid choices, leading to conflicts.
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
✗ Incorrect
Rewriting the grammar or applying precedence rules helps the parser decide between shift and reduce.
In a shift-reduce conflict, what are the two possible parser actions?
AShift or accept
BShift or reduce
CReduce or accept
DIgnore or reject
✗ Incorrect
The parser must choose between shifting (reading input) or reducing (applying a rule).
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
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.
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.
Final Answer:
When the parser cannot decide whether to read more input or apply a grammar rule -> Option A
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
Step 1: Understand reduce actions
Reduce means applying a grammar rule to replace a sequence of tokens with a non-terminal symbol.
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.
Final Answer:
The parser cannot decide which of two grammar rules to apply at the same point -> Option A
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
Step 1: Understand operator precedence in parsing
Multiplication (*) has higher precedence than addition (+), so the parser should process id * id before adding.
Step 2: Resolve shift-reduce conflict by shifting
At the * token, the parser shifts (reads) the * to handle multiplication first, delaying reduction of addition.
Final Answer:
Shift the * token to read more input before reducing -> Option C
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
Step 1: Identify cause of reduce-reduce conflict
Reduce-reduce conflicts arise from ambiguous grammar where two rules can apply at the same point.
Step 2: Fix by rewriting grammar
To fix, rewrite or refactor the grammar to remove ambiguity so only one rule applies at a time.
Final Answer:
Rewrite the grammar to remove ambiguity between rules -> Option B
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
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.
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.
Final Answer:
Because both A and B can reduce x, causing ambiguity -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.