Bischoff, Kurt M. (1992) Design, Implementation, Use, and Evaluation of Ox: An Attribute- Grammar Compiling System based on Yacc, Lex, and C. Technical Report TR92-31, Department of Computer Science, Iowa State University.
Design, Implementation, Use, and Evaluation of
Ox: An Attribute Grammar Compiling System
based on Yacc, Lex, and C
by Kurt M. Bischoff
Ox generalizes the function of Yacc in the way that attribute
grammars generalize context-free grammars. Ordinary Yacc and Lex
specifications may be augmented with definitions of synthesized
and inherited attributes written in C syntax. From these
specifications, Ox generates a program that builds and decorates
attributed parse trees. Ox accepts a most general class of
attribute grammars. The user may specify postdecoration
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
The translators generated by Ox use internal memory management
that is often much faster than the common technique of calling
malloc once for each parse-tree node.
Ox is a Yacc/Lex/C preprocessor, and is designed to bring
attribute grammars closer to the mainstream of Unix-based
language development. Ox inherits all of the familiar syntax and
semantics of Yacc, Lex, and C. It is relatively easy to convert
programs between Ox code and "pure Yacc/Lex/C" code.
Ox has been used to build a compiler for a small (eighty grammar
rules) block-structured imperative programming language.
This paper considers Ox's design, implementation, and use,
evaluates the performance of Ox-generated evaluators, and makes
recommendations for improvements in Ox.
Contact site administrator at: firstname.lastname@example.org