% EBNF syntax. \let\nt\textit % Nonterminal. \newcommand{\is}{& ${} ::= {}$ &} \newcommand{\optional}[1]{$[\,\text{#1}\,]$} % Option. \newcommand{\seplist}[2]{#2#1${}\ldots{}$#1#2} \newcommand{\sepspacelist}[1]{\seplist{\ }{#1}} \newcommand{\sepcommalist}[1]{\seplist{,\ }{#1}} \newcommand{\newprod}{\\\hskip 1cm\barre\hskip2mm} \newcommand{\phaprod}{\\\hskip 1cm\phantom\barre\hskip2mm} % Concrete syntax. \newcommand{\percentpercent}{\kw{\%\%}\xspace} \newcommand{\deuxpoints}{\kw{:}\xspace} \newcommand{\barre}{\kw{\textbar}\xspace} \newcommand{\kangle}[1]{\kw{\textless} #1 \kw{\textgreater}} \newcommand{\ocamltype}{\kangle{\textit{\ocaml type}}\xspace} \newcommand{\ocamlparam}{\kangle{\nt{uid} \deuxpoints \textit{\ocaml module type}}\xspace} \newcommand{\dheader}[1]{\kw{\%\{} #1 \kw{\%\}}} \newcommand{\dtoken}{\kw{\%token}\xspace} \newcommand{\dstart}{\kw{\%start}\xspace} \newcommand{\dtype}{\kw{\%type}\xspace} \newcommand{\dnonassoc}{\kw{\%nonassoc}\xspace} \newcommand{\dleft}{\kw{\%left}\xspace} \newcommand{\dright}{\kw{\%right}\xspace} \newcommand{\dparameter}{\kw{\%parameter}\xspace} \newcommand{\dpublic}{\kw{\%public}\xspace} \newcommand{\dinline}{\kw{\%inline}\xspace} \newcommand{\dpaction}[1]{\kw{\{} #1 \kw{\}}\xspace} \newcommand{\daction}{\dpaction{\textit{\ocaml code}}\xspace} \newcommand{\dprec}{\kw{\%prec}\xspace} \newcommand{\dequal}{\kw{=}\xspace} \newcommand{\dquestion}{\kw{?}\xspace} \newcommand{\dplus}{\kw{+}\xspace} \newcommand{\dstar}{\kw{*}\xspace} \newcommand{\dlpar}{\kw{(}\,\xspace} \newcommand{\drpar}{\,\kw{)}\xspace} \newcommand{\eos}{\kw{\#}\xspace} \newcommand{\dnewline}{\kw{\textbackslash n}\xspace} % Stylistic conventions. \newcommand{\kw}[1]{\text{\upshape\sf\bfseries #1}} \newcommand{\inlinesidecomment}[1]{\textit{\textbf{\footnotesize // #1}}} \newcommand{\sidecomment}[1]{\hskip 2cm\inlinesidecomment{#1}} \newcommand{\docswitch}[1]{\vspace{1mm plus 1mm}#1.\hskip 3mm} \newcommand{\error}{\kw{error}\xspace} % Abbreviations. \newcommand{\menhir}{Menhir\xspace} \newcommand{\menhirlib}{\texttt{MenhirLib}\xspace} \newcommand{\menhirlibconvert}{\href{http://gallium.inria.fr/~fpottier/menhir/convert.mli.html}{\texttt{MenhirLib.Convert}}\xspace} \newcommand{\cmenhir}{\texttt{menhir}\xspace} \newcommand{\ml}{\texttt{.ml}\xspace} \newcommand{\mli}{\texttt{.mli}\xspace} \newcommand{\mly}{\texttt{.mly}\xspace} \newcommand{\ocaml}{Objective Caml\xspace} \newcommand{\ocamlc}{\texttt{ocamlc}\xspace} \newcommand{\ocamlopt}{\texttt{ocamlopt}\xspace} \newcommand{\ocamldep}{\texttt{ocamldep}\xspace} \newcommand{\ocamlfind}{\texttt{ocamlfind}\xspace} \newcommand{\make}{\texttt{make}\xspace} \newcommand{\omake}{\texttt{omake}\xspace} \newcommand{\ocamlbuild}{\texttt{ocamlbuild}\xspace} \newcommand{\Makefile}{\texttt{Makefile}\xspace} \newcommand{\yacc}{\texttt{yacc}\xspace} \newcommand{\bison}{\texttt{bison}\xspace} \newcommand{\ocamlyacc}{\texttt{ocamlyacc}\xspace} \newcommand{\ocamllex}{\texttt{ocamllex}\xspace} \newcommand{\token}{\texttt{token}\xspace} \newcommand{\automaton}{\texttt{.automaton}\xspace} \newcommand{\conflicts}{\texttt{.conflicts}\xspace} \newcommand{\dott}{\texttt{.dot}\xspace} % Files in the distribution. \newcommand{\distrib}[1]{\texttt{#1}} % Environments. \newcommand{\question}[1]{\vspace{3mm}$\diamond$ \textbf{#1}} % Ocamlweb settings. \newcommand{\basic}[1]{\textit{#1}} \let\ocwkw\kw \let\ocwbt\basic \let\ocwupperid\basic \let\ocwlowerid\basic \let\ocwtv\basic \newcommand{\ocwbar}{\vskip 2mm plus 2mm \hrule \vskip 2mm plus 2mm} \newcommand{\tcup}{${}\cup{}$} \newcommand{\tcap}{${}\cap{}$} \newcommand{\tminus}{${}\setminus{}$} % Command line options. \newcommand{\obase}{\texttt{--base}\xspace} \newcommand{\ocomment}{\texttt{--comment}\xspace} \newcommand{\odepend}{\texttt{--depend}\xspace} \newcommand{\orawdepend}{\texttt{--raw-depend}\xspace} \newcommand{\odump}{\texttt{--dump}\xspace} \newcommand{\oerrorrecovery}{\texttt{--error-recovery}\xspace} \newcommand{\oexplain}{\texttt{--explain}\xspace} \newcommand{\oexternaltokens}{\texttt{--external-tokens}\xspace} \newcommand{\ofixedexc}{\texttt{--fixed-exception}\xspace} \newcommand{\ograph}{\texttt{--graph}\xspace} \newcommand{\oinfer}{\texttt{--infer}\xspace} \newcommand{\ointerpret}{\texttt{--interpret}\xspace} \newcommand{\ointerpretshowcst}{\texttt{--interpret-show-cst}\xspace} \newcommand{\ologautomaton}{\texttt{--log-automaton}\xspace} \newcommand{\ologcode}{\texttt{--log-code}\xspace} \newcommand{\ologgrammar}{\texttt{--log-grammar}\xspace} \newcommand{\onoinline}{\texttt{--no-inline}\xspace} \newcommand{\onostdlib}{\texttt{--no-stdlib}\xspace} \newcommand{\oocamlc}{\texttt{--ocamlc}\xspace} \newcommand{\oocamldep}{\texttt{--ocamldep}\xspace} \newcommand{\oonlypreprocess}{\texttt{--only-preprocess}\xspace} \newcommand{\oonlytokens}{\texttt{--only-tokens}\xspace} \newcommand{\ostrict}{\texttt{--strict}\xspace} \newcommand{\osuggestcomp}{\texttt{--suggest-comp-flags}\xspace} \newcommand{\osuggestlinkb}{\texttt{--suggest-link-flags-byte}\xspace} \newcommand{\osuggestlinko}{\texttt{--suggest-link-flags-opt}\xspace} \newcommand{\otable}{\texttt{--table}\xspace} \newcommand{\otimings}{\texttt{--timings}\xspace} \newcommand{\otrace}{\texttt{--trace}\xspace} \newcommand{\ostdlib}{\texttt{--stdlib}\xspace} \newcommand{\oversion}{\texttt{--version}\xspace}