• Announcing Ox release 1.9.3

    From Tom Shields@21:1/5 to All on Tue May 25 22:45:54 2021
    Ox version 1.9.3 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.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 specifications.

    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.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)