%!TEX root = manual.tex
%
\chapter{Change history}
\label{ch:history}

Here is a history of changes to the SML/NJ Language Processing Tools.
More details can be found in the SML/NJ \texttt{NOTES} and \texttt{README} files.
\begin{description}
  \item[SML/NJ 110.79]
    \mbox{}\\[0.5em]
    Modified scanner to allow comments in \ulex{} directives.
    \\[0.5em]
    \mlantlr{} now inlines the \texttt{EBNF} structure in the generated parser (instead of using
    the \texttt{AntlrEBNF} functor from the \texttt{ml-lpt} library.
    \\[0.5em]
    Preliminary work on supporting the \texttt{\%prefer} and \texttt{\%change} directives
    from \texttt{ml-yacc}.  The front-end accepts and checks these declaration forms, but
    the back-end does not yet generate code for them.  These will be documented once the
    implementation is complete.
%
  \item[SML/NJ 110.78]
    \mbox{}\\[0.5em]
    Improved the error message for when the lookahead computation fails in \mlantlr{}.
    \\[0.5em]
    Added \texttt{\%value} directive to allow non-nullary tokens to be inserted as
    an error-repair action.
    Note that the first version of this feature used the directive \texttt{\%default}, but
    this name was changed to \texttt{\%value} to match the ML-Yacc feature.
    \\[0.5em]
    Improved error messages for the situation where the lexer specification has an unclosed string.
%
  \item[SML/NJ 110.77]
    \mbox{}\\[0.5em]
    Fixed an inconsistency in the way that \mlantlr{} and \ulex{} handled the contents of
    a \texttt{\%defs} declaration.  \ulex{} made these definitions visible in the \texttt{UserDeclarations}
    substructure, whereas \mlantlr{} hid them.  We have changed the behavior of \ulex{} to match
    that of \mlantlr{} (\ie{}, hide the user definitions).  We chose to hide the user definitions
    in \ulex{} because they are usually not useful outside the lexer, hiding them reduces The
    size of the generated code, and definitions that are needed outside the lexer can be
    defined in an external module.  Note that the \texttt{UserDeclarations} substructure remains
    visible when \ulex{} is run in \texttt{ml-lex} compatibility mode.
    \\[0.5em]
    Added the \texttt{actionToString'} and \texttt{repairToString'} functions
    to the \texttt{AntlrRepair} structure.  These functions allow one to
    specialize the printing of tokens based on whether they are being added or deleted.
    \\[0.5em]
    Removed the \texttt{toksToString} function from the tokens structure that ml-antlr
    generates.  It was originally for use by the \texttt{AntlrRepair} structure, but that
    structure does not use it.
    \pagebreak
%
  \item[SML/NJ 110.72]
    \mbox{}\\[0.5em]
    Added \texttt{--strict-sml} flag to \ulex{} for MLton compatibility.
    \\[0.5em]
    Added \texttt{\%header} directive to the \mlantlr{} parser generator.
\end{description}%
