We can think of rendering rules as producing a particular ``display'' of a given structured object. Thus, in a system like La)TeX, the author of a macro picks a specific layout for objects appearing in the document. This choice, once made, holds throughout the rendering of the document. On an interactive system like AsTeR , the listener can pick different ways of ``hearing'' the same object[+].
In CS611, a course on advanced programming languages, we work with proof trees. Proof trees typically have a set of premises that lead to a conclusion. A typical rendering of a proof tree is:
We know that [tex2html_wrap5762]; Hence we infer [tex2html_wrap5764].
On the other hand, another rendering rule might ``display'' the same structure as:
We can conclude [tex2html_wrap5766] because we know [tex2html_wrap5768].This has the effect of inverting a proof tree. We perform such actions all the time when perusing written material. On the other hand, when listening to recorded books on tape, a listener is tied down to the one rendering order that the reader chose to use. In contrast, AsTeR allows the listener to determine the rendering order by activating different rules, thus enabling better comprehension of complex material.
Here is another example from the same course. The following rules show different ways of rendering occurrences of operator subst (textual substitution). They allow the listener to ``look'' at a particular expression from different perspectives. [tex2html_wrap5770] denotes [tex2html_wrap5772] with [tex2html_wrap5774] replaced by [tex2html_wrap5776]. The linear ``display'' used to layout this expression on paper is just one possible linearization of operator subst. When speaking this expression, the description can be formulated in several ways.
[tex2html_wrap5778] is written using macro
\subst, a macro
that takes three arguments. AsTeR is first extended to
recognize this macro call into object subst having three
arguments as follows:
\subst occurring in the document are
now represented as instances of object subst. Object
subst has its argument slot set to a list containing the
result of processing the arguments to the
Function argument can be used to access these within
rendering rules. Here are some AFL rules to
generate different renderings of this object.