- In a programming language, something is called ambiguous, if it can be interpreted in more than 1 way
- An optional else clause in an
if-then(-else)statement results in nested conditionals being ambiguous
- The context-free grammar is ambiguous (there is more than one parsing tree)
if a then s if b then s1 else s2
Nested statements are ambiguous:
if a then if b then s else s2
This can be interpreted as:
if a then (if b then s) else s2 if a then (if b then s else s2)
In LR Parsers, the dangling else is an example of a shift-reduce conflict.
There are multiple ways to solve this problem:
- By convention, the dangling else is always paired with the innermost if statement.
- By using explicit blocks, such as
begin...endin Pascal or
- Change syntax and include
- Don’t allow single