\[
\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|}
\]
- The definition keyword, terminal symbol def, is just the substring “def”.
- A variable, terminal symbol var, is any substring consisting of letters or digits and starting with a lowercase letter, except the substring “def”.
- An identifier, terminal symbol ident, is any sequence of letters or digits starting with an upper-case letter.
- The terminal symbols for left parenthesis, right parenthesis, comma, and equals are just substrings consisting of exactly those characters.