39/49
\begin{frame}{Ambiguity in Programming Languages}

  The following production rules (from ALGOL 60) became known as \emph{dangling else problem}:
  \[
  \begin{array}{rcl}
  {\it Statement} &\rightarrow& {\tt if}~{\it Condition}~{\tt then}~{\it Statement}~~\mid \vspace{1mm} \\
  && {\tt if}~{\it Condition}~{\tt then}~{\it Statement}~{\tt else}~{\it Statement}~~\mid \vspace{1mm} \\
  && \cdots \vspace{3mm} \\
  {\it Condition} &\rightarrow& \cdots
  \end{array}
  \]
  \pause
  \begin{goal}{}
    There are two derivation trees for
    \begin{talign}
      \texttt{if } \ldots \texttt{ then if } \ldots \texttt{ then } \ldots \texttt{ else } \ldots    
    \end{talign}
    \pause
    The production rules are \alert{ambiguous}.
  \end{goal}
  \bigskip
  
  {\footnotesize Donald Knuth, \textit{The Remaining Trouble Spots in ALGOL 60}, CACM, 1967}
\end{frame}