diff options
author | dos-reis <gdr@axiomatics.org> | 2007-09-13 13:06:59 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-09-13 13:06:59 +0000 |
commit | 499600fdff22b717a57aaee6934d1dbabe2723ef (patch) | |
tree | 858e70f56a8439a1a642dcb5cf1635e3bdecb6e8 /src/interp/ptrees.boot.pamphlet | |
parent | 7491a064401ff3493d32513d9028afecf29f2e5b (diff) | |
download | open-axiom-499600fdff22b717a57aaee6934d1dbabe2723ef.tar.gz |
* 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.
Diffstat (limited to 'src/interp/ptrees.boot.pamphlet')
-rw-r--r-- | src/interp/ptrees.boot.pamphlet | 45 |
1 files changed, 44 insertions, 1 deletions
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 <<*>>= <<license>> +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} |