Dangling Else
- 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...end
in Pascal or{...}
in C. - Change syntax and include
end if
statement. - Don’t allow single
if
statements.