\documentclass{article} \usepackage{axiom} \begin{document} \title{\$SPAD/src/interp ptrop.boot} \author{The Axiom Team} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{License} <>= -- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions are -- met: -- -- - Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- - Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in -- the documentation and/or other materials provided with the -- distribution. -- -- - Neither the name of The Numerical ALgorithms Group Ltd. nor the -- names of its contributors may be used to endorse or promote products -- derived from this software without specific prior written permission. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @ <<*>>= <> )package "BOOT" --% Utility operations on Abstract Syntax Trees -- An S-expression which people can read. pfSexpr pform == strip pform where strip pform == pfId? pform => pfIdSymbol pform pfLiteral? pform => pfLiteralString pform pfLeaf? pform => tokPart pform pfApplication? pform => args := a := pfApplicationArg pform if pfTuple? a then pf0TupleParts a else [a] [strip p for p in cons(pfApplicationOp pform, args)] cons(pfAbSynOp pform, [strip p for p in pfParts pform]) pfCopyWithPos( pform , pos ) == pfLeaf? pform => pfLeaf( pfAbSynOp pform , tokPart pform , pos ) pfTree( pfAbSynOp pform , [ pfCopyWithPos( p , pos ) for p in pfParts pform ] ) pfMapParts(f, pform) == pfLeaf? pform => pform parts0 := pfParts pform parts1 := [FUNCALL(f, p) for p in parts0] -- Return the original if no changes. same := true for p0 in parts0 for p1 in parts1 while same repeat same := EQ(p0,p1) same => pform pfTree(pfAbSynOp pform, parts1) pf0ApplicationArgs pform == arg := pfApplicationArg pform pf0FlattenSyntacticTuple arg pf0FlattenSyntacticTuple pform == not pfTuple? pform => [pform] [:pf0FlattenSyntacticTuple p for p in pf0TupleParts pform] @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}