Announcing Ox release 1.10

Tom Shields <>
Fri, 8 Oct 2021 21:20:14 -0500

          From comp.compilers

Related articles
Announcing Ox release 1.10 (Tom Shields) (2021-10-08)
| List of all articles for this month |

From: Tom Shields <>
Newsgroups: comp.compilers
Date: Fri, 8 Oct 2021 21:20:14 -0500
Organization: Compilers Central
Injection-Info:; posting-host=""; logging-data="56161"; mail-complaints-to=""
Keywords: parse, tools, available
Posted-Date: 08 Oct 2021 23:35:15 EDT

Ox version 1.10 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 (8 Oct 2021)

** Internals

This release is primarily a "low hanging fruit" conversion of the Ox source
from C99 to C++11:
- Explicit and implicit calls to the C library memory allocation functions
were eliminated (except within the 'flex' lexer skeleton code).
- C strings and the associated C library string manipulation functions were
replaced by the 'std::string' class (except within the 'flex' lexer skeleton
- C structs were upgraded with constructors.
- C data structures were replaced with structures derived from C++ standard
- Function argument pointer types were replaced with reference types.
- Pointers used to step through data structures were replaced with iterators.
- C variable length arrays were replaced with 'std::string' or 'std::vector'
- The global pointer variables "char **ptext" and "int *pleng", used to
reference local data in the lexers, were eliminated.

The generation of an empty 'switch' case in 'yyyDecorate ()' is avoided if
there is no attribute to be evaluated.

The generation of an empty 'switch' case in 'yyyDoTraversals ()' is avoided if
there is no traversal action for a rule.

** Bug fixes

Parsing of an array subscript within traversal code was corrected.

** Test suite

The 'trav2' test case was updated to verify correct parsing of array
subscription within traversal code.

** Build system

GNUlib components are no longer needed for a portable Ox build.

Build support was removed for the following compilers, due to defects
uncovered in the implementation of the C++ 2011 standard during portability
- GNU gcc/g++ 4.8.x
- Solaris Developer Studio 12.5 and 12.6

[demime 1.01d removed an attachment of type application/pgp-signature which had a name of signature.asc]

Post a followup to this message

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