Mercurial > ~dholland > hg > ag > index.cgi
view doc/misc/whatsnew.html @ 8:ec2b657edf13
Add explicit lint-comment-style fallthrough annotations.
GCC now assumes that if you don't have these you're making a mistake,
which is annoying.
XXX: This changeset updates the AG output files only (by hand) and is
XXX: abusive - rebuilding them will erase the change. However, I need
XXX: to get things to build before I can try to get AG to issue the
XXX: annotations itself, so this seems like a reasonable expedient.
author | David A. Holland |
---|---|
date | Mon, 30 May 2022 23:51:43 -0400 |
parents | 13d2b8934445 |
children | 1c9dac05d040 |
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 © 1993-2002 Parsifal Software<BR> Copyright © 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>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>