\begin{frame}{Removal of Useless Variables} \begin{question} How to determine useless variables of a context-free grammar? \end{question} \pause \begin{construction} % Let $G$ be a context-free grammar. % \pause\medskip % A variable $A$ is called \emph{productive} if $A \Rightarrow^+ w$ with $w \in T^*$. \pause\medskip We determine all productive variables: \begin{itemize} \item If $A \to y$ is a rule and all variables in $y$ are productive,\\ then $A$ is productive. \end{itemize} \pause Remove all rules that contain a \alert{non-}productive variable. \pause\medskip We determine all \emph{reachable} variables as follows: \begin{itemize} \item $S$ is reachable. \item If $A \to y$ and $A$ is reachable, then so are all variables in $y$. \end{itemize} \pause Remove all rules that contain a \alert{non-}reachable variable. \pause\medskip A variable is \alert{useless} if it is \alert{not in one of the remaining rules}. \end{construction} \bigskip \end{frame}