% 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{\menhirinterpreter}{\texttt{MenhirInterpreter}\xspace} \newcommand{\menhirlibincrementalengine}{\href{http://gallium.inria.fr/~fpottier/menhir/IncrementalEngine.ml.html}{\texttt{MenhirLib.IncrementalEngine}}\xspace} \newcommand{\cmenhir}{\texttt{menhir}\xspace} \newcommand{\ml}{\texttt{.ml}\xspace} \newcommand{\mli}{\texttt{.mli}\xspace} \newcommand{\mly}{\texttt{.mly}\xspace} \newcommand{\ocaml}{OCaml\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{\oignoreone}{\texttt{-{}-unused-token}\xspace} \newcommand{\oignoreall}{\texttt{-{}-unused-tokens}\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} \newcommand{\ocoq}{\texttt{-{}-coq}\xspace} \newcommand{\ocoqnocomplete}{\texttt{-{}-coq-no-complete}\xspace} \newcommand{\ocoqnoactions}{\texttt{-{}-coq-no-actions}\xspace} % Adding mathstruts to ensure a common baseline. \newcommand{\mycommonbaseline}{ \let\oldnt\nt \renewcommand{\nt}[1]{$\mathstrut$\oldnt{##1}} \let\oldbasic\basic \renewcommand{\basic}[1]{$\mathstrut$\oldbasic{##1}} }