How To Define Pretty Print Tables
XT -- A Bundle of Program Transformation Tools
Task
How to define pretty-print tables for use with
GPP.
Description
The utility
AsFixToAbox is a language-independent front-end for the pretty-print system
GPP. Instantiated with a set of language specific
formatting rules it becomes a formatter for a specific language.
These formatting rules (or pretty-print rules) define mappings from language constructs (specified as SDF productions) to BOX expressions. BOX is a language independent markup language to describe the intended layout of text. See
http://www.cwi.nl/~mdejonge/papers/PrettyPrinterForEveryOccasion.ps for more information about pretty-print tables and the BOX markup language.
Pretty-print entries are defined in an ordered sequence of pretty-print tables.
This ordering allows overruling of pretty-print entries by defining overruling entries in tables with higher precedence.
Examples
A pretty-print entry for a language construct S1 S2 ... Sn -> S looks like:
S1 S2 ... Sn -> S -- H [ _1 _2 ... _n]
This entry defines a horizontal formatting (because of the H operator). The BOX expressions corresponding to the formatted non-terminal symbols S1 S2 ... Sn are refered to using the numbered place holders _1 _2 ... _n
A more advanced example which defines a formatting for an `if-then-else' construct is depicted below:
[
"if" Cond "then" StatSeq "else" StatSeq "fi" -> Stat --
V [ V is=3 [ H[ KW["if"] _1 KW["then"]
_2
]
V is=3 [ KW["else]"
_3
]
KW["fi"]
]
]
The following BOX operators are used in this example: `KW' to format keywords, `H' to layout boxes horizontally, and `V' to format sub-boxes vertically. Furthermore, the space option `is' is used to specify that the boxes in a vertical context should be indented to the right. This example defines that if-then-else constructs should be formatted as:
if Cond then
StatSeq
else
StatSeq
fi
See also
GPP,
HowToPrettyPrintAGrammar