Announcing Ox release 1.9.3

Tom Shields <>
Tue, 25 May 2021 22:45:54 -0500

          From comp.compilers

Related articles
Announcing Ox release 1.9.3 (Tom Shields) (2021-05-25)
| List of all articles for this month |

From: Tom Shields <>
Newsgroups: comp.compilers
Date: Tue, 25 May 2021 22:45:54 -0500
Organization: Compilers Central
Injection-Info:; posting-host=""; logging-data="83916"; mail-complaints-to=""
Keywords: parse, attribute, tools
Posted-Date: 27 May 2021 10:41:05 EDT

Ox version 1.9.3 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.9.3 (24 May 2021)

** Enhancements

Accept and pass through the Bison '%union TAG { ... }' and predicate action
'%? { ... }’ extensions, and the MSTA named reference definition extension.

Recognize and report unsupported MSTA constructs.

Allow ‘NIO' pseudo attribute references to occur within a dynamic traversal
modifier expression.

** Internals

The lexer and parser implementations were significantly restructured:
- The Y-file lexers (agc1.l, agc2.l) were merged (agc-Yfile-lexer.l)
- The L-file lexers (agc3.l, agc5.l) were merged (agc-Lfile-lexer.l)
- The "-S" option (strip) lexer (agc4.l) was renamed (agc-strip-lexer.l)
- The L-file parsing rules were moved into a separate L-file parser
- The L-file parser processes a single L-file, rather than looping over the
set of L-files via `yywrap ()' file management
- Iteration over multiple L-files by the L-file parser or the "-S” option
(strip) lexer is handled in `main ()'

The Y-file lexer was restructured to reduce the use of start conditions used
to accomplish 'parsing' in the lexer:
- The start conditions `ATTR_EVAL', `TRAV_CODE' and `TRAV_ACT’ were
eliminated, with the rules merged into the `YATTR_REF' start condition
- Most of the rules in the `ATTR_DEPS' start condition were combined with
`YATTR_REF' start condition rules, specialized as required

The Y-file parsers were modified to accommodate the Y-file lexer changes. In
particular, the separate sets of parsing rules for processing Y-file implicit,
explicit and mixed mode attribute dependency specifications were consolidated
into a single set of rules for processing all attribute dependency

Additional lexer improvements:
- Escaped character patterns occurring within multiple named patterns were
consolidated into the `ESCSEQ' named pattern; hexadecimal values were added
- Repeated identical lexer actions within a common set of start condition were
consolidated into a single lexer rule with the individual patterns combined
with the '|' regular expression operator
- The legacy Lex `yywrap ()' function was replaced with Flex '<<EOF>>' rules
- The recognition of attribute definition mode annunciators (`@i', `@e',
`@m’) in the Y-file lexer was merged into the traversal mode annunciator
`"@"{ID}’ pattern rule action as special cases.

** Bug fixes

Parsing of the `return' expression in an L-file attribute reference section
containing multiple tokens was corrected.

Processing of multi-line string literals in the lexers was corrected to copy
the '\n' characters into the string literal in the corresponding output file.

The the check for an ambiguous grammar symbol ending with a '.' followed by a
numeric character sequence was corrected.

Terminal symbols containing '.' characters are not accepted by any of the
supported parser generators.

Wide character constants are only legal within action code.

A Bison or BYacc position location pseudo variable is not a legal BtYacc
inherited attribute identifier.

Post a followup to this message

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