view doc/misc/whatsnew.html @ 21:1c9dac05d040

Add lint-style FALLTHROUGH annotations to fallthrough cases. (in the parse engine and thus the output code) Document this, because the old output causes warnings with gcc10.
author David A. Holland
date Mon, 13 Jun 2022 00:04:38 -0400
parents 13d2b8934445
children
line wrap: on
line source

<HTML>
<HEAD>
<TITLE>What's New</TITLE>
</HEAD>
<BODY
  BGCOLOR="#ffffff"
  TEXT="#000000"
  LINK="#0033CC"
  VLINK="#CC0033"
  ALINK="#CC0099"
>

<P align=right>
<IMG SRC=html/images/aga6d.gif ALT="AnaGram"><BR>
A System for Syntax Directed Programming<BR>
Version 2.40<BR>
<BR>
Copyright &copy; 1993-2002 Parsifal Software<BR>
Copyright &copy; 2006, 2007 David A. Holland<BR>
All Rights Reserved.
</P>

<H1>What's New</H1>
<P>
<UL>
<LI><A HREF=#ag240>AnaGram 2.40</A></LI>
<LI><A HREF=#ag201>AnaGram 2.01</A></LI>
</UL>
</P>

<A NAME="ag240"></A>
<H2>AnaGram 2.40</H2>
<P>
<UL TYPE=Disc>
<LI><A HREF="#240oss">Open source</A></LI>
<LI><A HREF="#240unix">Unix support</A></LI>
<LI><A HREF="#240functionality">Improved functionality</A></LI>
<LI><A HREF="#240convenience">Increased convenience</A></LI>
<LI><A HREF="#240fixes">Bug fixes</A></LI>
</UL>
</P>

<P>
Most of the changes in AnaGram 2.40 are under the hood - cleanup of
source files, reorganization of the source tree, revision of build and
test procedures, and so forth, in preparation for the open source
release. All of this will, with luck, be invisible to the end user.
</P>

<A NAME="240oss"></A>
<H2>Open Source</H2>
<P>
AnaGram is now <A HREF=license.html>open source</A>. AnaGram itself
uses the 4-clause BSD license; the parsing engine, and thus the output
files, are licensed with the less restrictive zlib license. Source
distributions are available from
<A HREF=http://www.parsifalsoft.com>http://www.parsifalsoft.com</A>.
</P>

<P>
The manual has been re-typeset using LaTeX instead of WordPerfect.
The typographic consistency and formatting has been considerably
improved; unfortunately, the pagination is now completely different,
so page numbers are not portable to the new version.
</P>

<P>
All the logic dealing with registration, trial copies, serial numbers,
and so forth has been removed.
</P>

<A NAME="240unix"></A>
<H2>Unix Support</H2>
<P>
The Unix build of the command-line version of AnaGram (agcl) is now
supported and available to the public. There is at present no GUI for
the Unix version. The long-term goal is to migrate the AnaGram GUI
away from the closed (and orphaned) IBM Visual Age class library to
something else, probably GTK, so as to support both Windows and Unix.
</P>

<A NAME="240functionality"></A>
<H2>Improved Functionality</H2>
<P>
<B>Examples.</B> The examples have been adjusted to the current
dialect of C++ and are now compilable again. The legacy "classlib"
code some still depend on is being phased out.
</P>

<A NAME="240convenience"></A>
<H2>Increased Convenience</H2>
<P>
<B>File names.</B> File names in the AnaGram distribution and source
tree are no longer limited to 8+3 characters, and quite a few now have
less cryptic names. Additionally, all HTML files are now named ".html",
not ".htm".
</P>

<P>
<B>Installed files.</B> The <TT>AnaGram.cgb</TT> and
<TT>AnaGram.hlp</TT> files found in older releases of AnaGram no
longer exist; their contents are compiled into the AnaGram executables
instead.
</P>

<A NAME="240fixes"></A>
<H2>Bug Fixes</H2>
<P>
<B>Engine compiler error.</B> The <TT>error_message</TT> field of
the PCB has been changed to <TT>const char *</TT> so current C++
compilers will accept the code generated when <I>diagnose errors</I>
is turned off.
</P>

<P>
<B>Engine compiler warnings.</B> The code generated by AnaGram
includes several <TT>switch</TT> cases that intentionally fall
through. These now include explicit <TT>FALLTHROUGH</TT> annotations
to satisfy current compilers.
</P>

<P>
<B>Multiple output header files.</B> Including more than one AnaGram
output header file at once used to cause some compilers to issue a
warning, because an <TT>#ifndef</TT> directive was checking the wrong
symbol. This has been corrected.
</P>

<P>
<B>Wrappers and error tokens.</B> AnaGram 2.01 generated uncompilable
code if you tried to use the <I>wrapper</I> feature and error token
resynchronization at the same time. This has been corrected.
</P>

<P>
<B>More than 256 keywords.</B> Build 8 of AnaGram 2.01 fixed certain
problems with large keyword tables, but in the process introduced
another, which is now fixed.
</P>

<HR>
<!-- ------------------------------------------------------------ -->

<A NAME="ag201"></A>
<H2>AnaGram 2.01</H2>
<UL TYPE=Disc>
<LI><A HREF="#201functionality">Improved functionality</A></LI>
<LI><A HREF="#201diagnostics">Improved error diagnostics</A></LI>
<LI><A HREF="#201convenience">Increased convenience</A></LI>
<LI><A HREF="#201defaults">Changed defaults</A></LI>
<LI><A HREF="#201fixes">Bug fixes</A></LI>
</UL>

<P>


<H2><A NAME="201functionality">Improved Functionality</A></H2>
<B>Improved support for building thread safe parsers.</B> All
nonconstant parser data previously declared as static variables has been
moved to the parser control block. When the <I>reentrant parser</I> switch
is set, all references to the parser control block are passed to functions
via calling sequences. The <I>extend pcb</I> switch provides a mechanism to
add user-defined variables to the parser control block.
<P>
<B>Improved support for C++ parsers.</B> The <I>wrapper</I> statement
provides C++ wrapper classes for objects to be stored on the parser value stack.
The <I>PCB_TYPE</I> macro allows you to derive a C++ class from the parser control
block and to access its members from your reduction procedures.
<P>
<B>Support for the ISO-Latin-1 character set</B>. When
the <I>case sensitive</I> switch is off and the <I>iso latin 1</I> switch
is on, case conversion is performed for all ISO Latin 1
characters, not just those in the ASCII range.
<P>
<B>Improved support for error diagnostics.</B> It is now possible for users
to provide their own text for the error messages created by the <I>diagnose
errors</I> switch. In addition, the <I>token names</I> table option now
includes ascii representation of individual characters and keywords instead
of only named tokens. The <I>token names only</I> switch can be used for
compatibility with previous versions of AnaGram

<P>
<B>More precise determination of error context.</B> The tables used by the
error frame option to provide the context of a syntax error have been
reworked and now provide a substantially more precise localization of the
error.
<P>
<BR>

<H2><A NAME="201diagnostics">Improved Error Diagnostics</A></H2>

<B>Missing reduction procedure diagnostic.</B>
In addition to warning that there is a parameter assignment
without a reduction procedure, this
diagnostic is now provided if the default reduction value
does not have the same data type as the reduction token.
<P>
<B>Command line version.</B> Diagnostics have been reformatted so
they can be recognized by the Microsoft Visual C++ IDE.

<P>
<B>Refined keyword anomaly diagnostics.</B> There should
now be fewer false alarms.
<P>
<H2><A NAME="201convenience">Increased Convenience</A></H2>

<B>File Trace.</B> If your grammar uses semantically determined productions,
the File Trace feature will now remember the choices you have
made for reduction tokens, so that you do not have to make
the same choices over and over again as you work with an example.
<P>
<B>File paths</B>. The file paths in the #line directives created by the line numbers
switch now use forward slashes instead of backslashes.
<P>
<H2><A NAME="201defaults">Changed Defaults</A></H2>

<B>Parser stack alignment.</B> Now defaults to long instead of int.
<P>
<B>Parser stack size.</B> Now defaults to 128 instead of 32.
<P>
<H2><A NAME="201fixes">Bug Fixes</A></H2>

<B>Interaction between context tracking and error token. </B>In previous
versions of AnaGram, if the first token in a rule was the error token,
the value of CONTEXT was the value that corresponded to the location
of the error. CONTEXT now correctly shows the context at which the
aborted rule began. For instance, in the following example, if a
syntax error is encountered while parsing the expression, the error
rule will skip over remaining characters to the terminating semicolon.
When invoked from handleError(), the CONTEXT macro will return the
context as it was at the beginning of the expression.
<PRE>
        expression statement
          -> expression, ';'
          -> error, ~(eof + ';')?..., ';'        =handleError();
</PRE>
<B>Distinguish lexemes.</B> Several minor bugs in the implementation of <I>distinguish lexemes</I> have been
corrected.
<P>
<B>Set partition logic.</B> Corrected problems in the interaction between the set partition logic
and the implementation of the <I>disregard</I> statement.
<P>
<B>Table size.</B> Fixed a data sizing problem which occurred when one particular parse table
had precisely 256 entries.
<P>
<B>Keyword recognition.</B> Fixed a problem that could cause difficulties with keyword
recognition when the <I>case sensitive</I> switch was turned off.
<P>
<B>Default conflict resolution.</B> With unresolved shift-reduce conflicts, the shift case was
not always being selected. This problem has been corrected.
<P>
<B>Lockup.</B> It was possible to write an erroneous grammar that would cause
AnaGram to lock up. This problem has been corrected.
<P>
<B>Potential bus error.</B> The error diagnostic funtion created by the <I>diagnose errors</I>
switch, could, under some circumstances, access an uninitialized value
on the parser value stack. This problem has been corrected.
<P>
<B>Internal errors.</B> Fixed a number of minor bugs which could cause internal errors
while running File Trace.

</BODY>
</HTML>