\[
\newcommand{\tr}{\Rightarrow}
\newcommand{\trs}{\tr^{\!\ast}}
\newcommand{\rlnm}[1]{\mathsf{(#1)}}
\newcommand{\rred}[1]{\xrightarrow{#1}}
\newcommand{\rreds}[1]{\mathrel{\xrightarrow{#1}\!\!^*}}
\newcommand{\cl}{\mathsf{Cl}}
\newcommand{\pow}{\mathcal{P}}
\newcommand{\matches}{\mathrel{\mathsf{matches}}}
\newcommand{\kw}[1]{\mathsf{#1}}
\newcommand{\andop}{\mathrel{\&\!\&}}
\newcommand{\orop}{\parallel}
\newcommand{\ff}{\mathsf{false}}
\newcommand{\tt}{\mathsf{true}}
\newcommand{\abra}[1]{\langle #1 \rangle}
\newcommand{\bnfnt}[1]{\abra{\small \textsf{#1}}}
\newcommand{\llbracket}{[\![}
\newcommand{\rrbracket}{]\!]}
\newcommand{\first}{\mathsf{First}}
\newcommand{\nullable}{\mathsf{Nullable}}
\newcommand{\follow}{\mathsf{Follow}}
\newcommand{\tm}[1]{\mathsf{#1}}
\newcommand{\nt}[1]{\mathit{#1}}
\newcommand{\Coloneqq}{::=}
\newcommand{\abs}[1]{|#1|}
\]
\[\begin{array}{|c|c|}\hline
\text{Nonterminal} & \text{Follow} \\\hline
B & ),\,\andop,\,\orop \\\hline
\end{array}
\qquad
\begin{array}{|c|c|}\hline
\text{Rule RHS} & \text{Nullable?} & \text{First} \\\hline
\tt & \times & \tt \\
\ff & \times & \ff \\
(B) & \times & ( \\
B \andop B & \times & \tt,\,\ff,\,( \\
B \orop B & \times & \tt,\,\ff,\,( \\\hline
\end{array}\]
We define the parsing table , usually $T$, for a given grammar as a 2d array in which each entry $T[X,a]$ is a set of production rules from the grammar, such that some rule $X \Coloneqq \beta$ is in the set $T[X,a]$ just if, either:
$a \in \first(\beta)$
or, $\nullable(\beta)$ and $a \in \follow(X)$