.TH PP-ABS 1 "20 April 1992" "Demeter" "Demeter Software" .SH NAME pp-abs \- Propagation pattern abstractor .SH SYNOPSIS .I pp-abs call-graph-file .SH DESCRIPTION .I pp-abs abstracts a propagation directive for a propagation pattern. .I pp-abs takes as input a class dictionary extended with a call graph, contained in the file .I call-graph-file. The call graph notation expresses methods attached to classes in a class dictionary. The body of a method consists of a number of unique calls to the same or other methods attached to some class in the class dictionary. The following example illustrates a class dictionary for prefix expressions extended with a call graph for the .I eval method attached to the classes in the class dictionary. Example = PrefixList. .br PrefixList ~ { Prefix }. .br Prefix : Simple | Compound. .br Simple = Number. .br Compound = Op PrefixList. .br Op : AddSym | MulSym. .br AddSym = . .br MulSym = . *terminal_sets* Number. *implementation* Example::eval() *returns* void .br { .br (PrefixList => eval()) .br } PrefixList::eval() *returns* void .br { .br (Prefix => eval()) .br } Prefix::eval() *returns* void Compound::eval() *returns* void .br { .br (args => eval()), .br (op => eval()) .br } Op::eval() *returns* void .I pp-abs requires the name of the class in the class dictionary from which to start looking for a propagation pattern, as well as the interface that defines such propagation pattern. When run, .I pp-abs then prompts for the starting class and the file containing the definition of the interface with the following messages. Starting at class: .br File containing interface definition: In response to the first message, the user writes the name of a class in the class dictionary in .I call-graph-file. In response to the second message, the user writes the name of a file containing the definition of an interface as given by class Interface in the class dictionary in the file $DEMETER/utils/pp-abs/pp-abs.cd. As output, .I pp-abs writes on the standard output a propagation pattern with the given interface and with a propagation directive that denotes a propagation graph that contains the call graph given as input. .SH EXAMPLE Let us assume that a file named .I prefix contains the class dictionary extended with a call graph for the eval methods illustrated above and let a file named .I eval contain the interface for the eval method as follows: eval() *returns* void The following command runs .I pp-abs: $ pp-abs prefix having the following interaction: Adding terminals ... Merging graphs ... Adding rev alt edges ... Computing SCC ... Computing propagation frontier ... Starting at class: .I Example .br File containing interface definition: .I eval Generating propagation graph ... Computing SCC ... Computing matrix ... Computing marks ... Connecting propagation neighbors ... Computing bypassing edges ... Propagation pattern: *propagate* *interface* void * eval ( ) *from* Example *to* Op *** FINISHED *** Here, the responses to the two prompts, .I Example and .I eval, are underlined. The output of this example starts with the keyword .I *propagate*. .SH FILES The file $DEMETER/utils/pp-abs/pp-abs.cd contains a class dictionary describing the class dictionary notation extended with the call graph notation. .SH NOTE .I pp-abs is an experimental research tool. It is not intended as a final product. Any suggestions will be considered. .SH REFERENCES .I Abstracting Graph-Based Specifications of Object-Oriented Programs .br Ignacio Silva-Lepe .br Technical Report NU-CCS-92-4, January 1992