From 499600fdff22b717a57aaee6934d1dbabe2723ef Mon Sep 17 00:00:00 2001 From: dos-reis Date: Thu, 13 Sep 2007 13:06:59 +0000 Subject: * Makefile.pamphlet (OBJS): Don't include ptrop.$(FASLEXT). (ptrees.$(FASLEXT)): New rule. (cparse.$(FASLEXT)): Likewise. * ptrop.boot.pamphlet: Move content to ptrees.boot.pamphlet. * ptrees.boot.pamphlet: Import posit, serror. * cparse.boot: New. Import ptrees. * cparse.boot.pamphlet: Move content to cparse.boot. Remove. * serror.boot: New. (pfSourceStok): Move to posit.boot. (npMissingMate): Move to cparse.boot. (npMissing): Likewise. (npCompMissing): Likewise. (npRecorverTrap): Likewise. (npListAndRecover): Likewise. (npMoveTo): Likewise. * serror.boot.pamphlet: Move content to serror.boot. Remove. --- src/interp/ptrees.boot.pamphlet | 45 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src/interp/ptrees.boot.pamphlet') diff --git a/src/interp/ptrees.boot.pamphlet b/src/interp/ptrees.boot.pamphlet index dea41bdc..414b09af 100644 --- a/src/interp/ptrees.boot.pamphlet +++ b/src/interp/ptrees.boot.pamphlet @@ -62,6 +62,9 @@ THE PFORM DATA STRUCTURE <<*>>= <> +import '"posit" +import '"serror" + )package "BOOT" --% SPECIAL NODES @@ -741,7 +744,47 @@ pfFlattenApp x== [x] - +--% 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} -- cgit v1.2.3