Announcing Ox release 1.10.2

Tom Shields <>
Fri, 6 May 2022 20:35:08 -0500

          From comp.compilers

Related articles
Announcing Ox release 1.10.2 (Tom Shields) (2022-05-06)
| List of all articles for this month |

From: Tom Shields <>
Newsgroups: comp.compilers
Date: Fri, 6 May 2022 20:35:08 -0500
Organization: Compilers Central
Injection-Info:; posting-host=""; logging-data="35207"; mail-complaints-to=""
Keywords: parse, tools, available
Posted-Date: 06 May 2022 21:36:45 EDT

Ox version 1.10.2 is now available on SourceForge

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.


* Noteworthy changes in release 1.10.2 (29 April 2022)

** Enhancements

The spanning location, rather than the line, is reported in a diagnostic
message, using the 'bison' format "file:line#.column#-line#.column#”.

Diagnostic messages are reworded to reduce verbosity.

Macro formal parameter substitution now occurs for all components of an
attribute reference.

** Internals

The bison-generated and maintained 'position' and 'location' class values,
rather than global input file name and line number values, are now used

The 'YYLEX_DEBUG' macro, and the associated tracing version of the 'yylex
()’ facade, was eliminated; the 'bison' and 'flex' debugging traces are more

The interpretation of the 'YYDEBUG' environment variable is changed:
- YYDEBUG == 1 => trace the parsers
- YYDEBUG == 2 => trace the lexers
- YYDEBUG == 3 => trace both the lexers and parsers

** Bug fixes

The column position calculations were corrected, and now conform to the
'bison' convention that the end column is 1 past the last matched position,
with the exception that the position of an EOL character is the next line at
column 0.

The invocations of 'yyyDecorate ()', 'yyyExecuteRRsection ()' and
'yyyDoTraversals ()’ at the end of the parse are inhibited if 'yyyabort ()'
has been called. The attributed parse tree is almost certainly in an
inconsistent state in this case.

An obscure bug (introduced in ox release 1.9.3) in the start condition
initialization in the lexer that strips out Ox constructs was corrected.

** Build system

If the '--enable-maintainer-mode’ configure option is used, terminate with
an error if the $FLEX version is < 2.6.0, or the $BISON version is < 3.8.2.
The Ox lexer or parser source cannot be generated by these older versions.

If the '--enable-maintainer-mode’ configure option is NOT used, suppress the
build rules for generation of lexer and parser C++ source files.

The '--enable-maintainer-mode=dynamic’ configure option is not supported in
the Windows host environments.

The configure script now searches for 'gm4' before 'm4'. The GNU version of
'm4' is required to generate the Ox parser source files from
'./source/agc-parser.m4', and 'm4' is not always the GNU version.

The 'LEXGEN_INCLUDE_DIR' configure environment variable is now available to
specify a non-standard location for Lexer Generator include files, if any.

Redundant information in the configuration summary was removed.

The deprecated '--bison-bridge' configure option was removed.

The configure script now defaults to a C++ compiler for $LINT.

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.