Path: csiph.com!xmission!usenet.csail.mit.edu!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Tom Shields Newsgroups: comp.compilers Subject: Announcing Ox release 1.9.2 Date: Mon, 22 Feb 2021 18:33:18 -0600 Organization: Compilers Central Lines: 84 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <21-02-007@comp.compilers> Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="57269"; mail-complaints-to="abuse@iecc.com" Keywords: tools, parse, available Posted-Date: 22 Feb 2021 21:10:32 EST X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:2632 Ox version 1.9.2 is now available on SourceForge (sourceforge.net/projects/ox-attribute-grammar-compiler/). Ox generalizes the function of Yacc in the way that an attribute grammar generalizes a context-free grammar. Ordinary Yacc and Lex specifications may be augmented with definitions of synthesized and inherited attributes written in C/C++ syntax. Ox checks these specifications for consistency and completeness, and generates from them a program that builds and decorates attributed parse trees. The user may specify post-decoration traversals for easy ordering of side effects, such as code generation. Ox handles the tedious and error-prone details of writing code for parse-tree management, so its use eases problems of security and maintainability associated with that aspect of translator development. Ox NEWS * Noteworthy changes in release 1.9.2 (19 February 2021) ** Enhancements The `bison' '%name-prefix "PREFIX"' and '%define api.prefix {PREFIX}’ directives are recognized and used to correctly prefix references to `bison’ externally visible names. A new command line option "--language=[C|C++]" enables requesting C and C++ as the target language, without having to specify the target parser and/or lexer generator. The "--byacc" and "--lex" command line options now accept an optional target language. ** Internals The Ox grammar specification module is restructured into a separate module for each supported target parser generator. The single reduce/reduce conflict and two of the three shift/reduce conflicts in the release 1.9.1 grammar are eliminated. The multiple grammar specifications are maintained as a single source file for ease of maintaining the common subset across the targets, using the `m4' macro processor. Ox now uses the standard `bison' GLR skeleton. ** Bug fixes Corrected a memory leak in Ox: a buffer allocated by `getline ()' was not reclaimed. ** Documentation Revised the User Reference Manual and manpage for the command line option changes. ** Build system By default, Ox is built with all supported target parser generator modules statically linked into the executable, but can be configured at build-time for only a single module. Ox can also be configured to dynamically load and link a module specified on the command line, provided the host OS supports it. Various compile and link build rules used to override the default Automake-generated build rules with special case options were eliminated using a combination of Automake per-library compilation flags, and the fact that the Test suite had been previously updated to use C++ source file naming conventions recognized by Automake for those test cases specific to C++. The build system requires the use of Autoconf version 2.71, or greater. The build system now uses Libtool version 2.4.6.44-b9b4; version 2.4.6 issues a warning on Ubuntu Linux. The build system now uses modules from GNUlib as of 2021-02-16 @ 7:04PM CST. This version has the fix to a bug reported compiling the `regex' module on macOS Mojave with the Homebrew GCC v4.9 compiler. The GNUlib footprint was reduced by removing use of the standard library functions `asprintf ()' and `stpcpy ()', and by replacing use of the functions `strndup ()' and `strsep ()' with equivalent code when they are not supported by the host OS.