aboutsummaryrefslogtreecommitdiff
path: root/src/interp/cparse.boot.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-09-13 13:06:59 +0000
committerdos-reis <gdr@axiomatics.org>2007-09-13 13:06:59 +0000
commit499600fdff22b717a57aaee6934d1dbabe2723ef (patch)
tree858e70f56a8439a1a642dcb5cf1635e3bdecb6e8 /src/interp/cparse.boot.pamphlet
parent7491a064401ff3493d32513d9028afecf29f2e5b (diff)
downloadopen-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/cparse.boot.pamphlet')
-rw-r--r--src/interp/cparse.boot.pamphlet941
1 files changed, 0 insertions, 941 deletions
diff --git a/src/interp/cparse.boot.pamphlet b/src/interp/cparse.boot.pamphlet
deleted file mode 100644
index 7e9aeaa0..00000000
--- a/src/interp/cparse.boot.pamphlet
+++ /dev/null
@@ -1,941 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-
-\title{\File{src/interp/cparse.boot} Pamphlet}
-\author{The Axiom Team}
-
-\begin{document}
-\maketitle
-
-\begin{abstract}
-\end{abstract}
-
-\tableofcontents
-\eject
-
-\section{License}
-
-<<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.
-
-@
-<<*>>=
-<<license>>
-
-)package "BOOT"
-
--- npTerm introduced between npRemainder and npSum
--- rhs of assignment changed from npStatement to npGives
-
-npParse stream ==
- $inputStream:local := stream
- $stack:local :=nil
- $stok:local:=nil
- $ttok:local:=nil
- npFirstTok()
- found:=CATCH("TRAPPOINT",npItem())
- if found="TRAPPED"
- then
- ncSoftError(tokPosn $stok,'S2CY0006, [])
- pfWrong(pfDocument '"top level syntax error" ,pfListOf nil)
- else if not null $inputStream
- then
- ncSoftError(tokPosn $stok,'S2CY0002,[])
- pfWrong(pfDocument ['"input stream not exhausted"],pfListOf [])
- else if null $stack
- then
- ncSoftError(tokPosn $stok,'S2CY0009, [])
- pfWrong(pfDocument ['"stack empty"],pfListOf [])
- else
- CAR $stack
-
-npItem()==
- npQualDef() =>
- npEqKey "SEMICOLON" =>
- [a,b]:=npItem1 npPop1 ()
- c:=pfEnSequence b
- a => npPush c
- npPush pfNovalue c
- npPush pfEnSequence npPop1 ()
- false
-
-npItem1 c==
- npQualDef() =>
- npEqKey "SEMICOLON" =>
- [a,b]:=npItem1 npPop1 ()
- [a,append(c,b)]
- [true,append (c,npPop1())]
- [false,c]
-
-npFirstTok()==
- $stok:=
- if null $inputStream
- then tokConstruct("ERROR","NOMORE",tokPosn $stok)
- else CAR $inputStream
- $ttok:=tokPart $stok
-
-npNext() ==
- $inputStream := CDR($inputStream)
- npFirstTok()
-
-npState()==cons($inputStream,$stack)
-
-npRestore(x)==
- $inputStream:=CAR x
- npFirstTok()
- $stack:=CDR x
- true
-
-npPush x==$stack:=CONS(x,$stack)
-
-npPushId()==
- a:=GETL($ttok,'INFGENERIC)
- $ttok:= if a then a else $ttok
- $stack:=CONS(tokConstruct("id",$ttok,tokPosn $stok),$stack)
- npNext()
-
-npPop1()==
- a:=CAR $stack
- $stack:=CDR $stack
- a
-
-npPop2()==
- a:=CADR $stack
- RPLACD($stack,CDDR $stack)
- a
-
-npPop3()==
- a:=CADDR $stack
- RPLACD(CDR $stack,CDDDR $stack)
- a
-
-npParenthesized f==
- npParenthesize("(",")",f) or
- npParenthesize("(|","|)",f)
-
-npParenthesize (open,close,f)==
- a:=$stok
- npEqKey open =>
- APPLY(f,nil) and (npEqKey close or npMissingMate(close,a))=> true
- npEqKey close => npPush []
- npMissingMate(close,a)
- false
-
-npEnclosed(open,close,fn,f)==
- a:=$stok
- npEqKey open =>
- npEqKey close => npPush FUNCALL(fn,a,pfTuple pfListOf [])
- APPLY(f,nil) and (npEqKey close or npMissingMate(close,a))=>
- npPush FUNCALL (fn,a,pfEnSequence npPop1())
- false
- false
-
-npParened f ==
- npEnclosed("(",")",function pfParen,f) or
- npEnclosed("(|","|)",function pfParen,f)
-
-npBracked f ==
- npEnclosed("[","]",function pfBracket,f) or
- npEnclosed("[|","|]",function pfBracketBar,f)
-
-npBraced f ==
- npEnclosed("{","}",function pfBrace,f) or
- npEnclosed("{|","|}",function pfBraceBar,f)
-
-npAngleBared f ==
- npEnclosed("<|","|>",function pfHide,f)
-
-npBracketed f==
- npParened f or npBracked f or npBraced f or npAngleBared f
-
-npPileBracketed f==
- if npEqKey "SETTAB"
- then if npEqKey "BACKTAB"
- then npPush pfNothing() -- never happens
- else if APPLY(f,nil) and (npEqKey "BACKTAB" or npMissing "backtab")
- then npPush pfPile npPop1()
- else false
- else false
-
-npListofFun(f,h,g)==
- if APPLY(f,nil)
- then
- if APPLY(h,nil) and (APPLY(f,nil) or npTrap())
- then
- a:=$stack
- $stack:=nil
- while APPLY(h,nil) and (APPLY(f,nil) or npTrap()) repeat 0
- $stack:=cons(NREVERSE $stack,a)
- npPush FUNCALL(g, [npPop3(),npPop2(),:npPop1()])
- else
- true
- else false
-
-npList(f,str1,g)== -- always produces a list, g is applied to it
- if APPLY(f,nil)
- then
- if npEqKey str1 and (npEqKey "BACKSET" or true)
- and (APPLY(f,nil) or npTrap())
- then
- a:=$stack
- $stack:=nil
- while npEqKey str1 and (npEqKey "BACKSET" or true) and
- (APPLY(f,nil) or npTrap()) repeat 0
- $stack:=cons(NREVERSE $stack,a)
- npPush FUNCALL(g, [npPop3(),npPop2(),:npPop1()])
- else
- npPush FUNCALL(g, [npPop1()])
- else npPush FUNCALL(g, [])
-
-
-++ rewrite flets, using global scoping
-$npPParg := nil
-
-npPPff() ==
- FUNCALL $npPParg and npPush [npPop1()]
-
-npPPf() ==
- npSemiListing function npPPff
-
-npPPg() ==
- npListAndRecover function npPPf
- and npPush pfAppend npPop1()
-
-npPP(f) ==
- $npPParg := f
- npParened function npPPf
- or npPileBracketed function npPPg and
- npPush pfEnSequence npPop1()
- or FUNCALL f
-
-++ rewrite flets, using global scoping
-$npPCff := nil
-
-npPCff() ==
- FUNCALL $npPCff and npPush [npPop1()]
-
-npPCg() ==
- npListAndRecover function npPCff
- and npPush pfAppend npPop1()
-
-npPC(f) ==
- $npPCff := f
- npPileBracketed function npPCg and
- npPush pfEnSequence npPop1()
- or FUNCALL f
-
-
--- s must transform the head of the stack
-
-npAnyNo s==
- while APPLY(s,nil) repeat 0
- true
-
-npAndOr(keyword,p,f)==
- npEqKey keyword and (APPLY(p,nil) or npTrap())
- and npPush FUNCALL(f, npPop1())
-
-npRightAssoc(o,p)==
- a:=npState()
- if APPLY(p,nil)
- then
- while npInfGeneric o and (npRightAssoc(o,p)
- or (npPush pfApplication(npPop2(),npPop1());false)) repeat
- npPush pfInfApplication(npPop2(),npPop2(),npPop1())
- true
- else
- npRestore a
- false
-
--- p o p o p o p = (((p o p) o p) o p)
--- p o p o = (p o p) o
-
-npLeftAssoc(operations,parser)==
- if APPLY(parser,nil)
- then
- while npInfGeneric(operations)
- and (APPLY(parser,nil) or
- (npPush pfApplication(npPop2(),npPop1());false))
- repeat
- npPush pfInfApplication(npPop2(),npPop2(),npPop1())
- true
- else false
-
-npInfixOp()==
- EQ(CAAR $stok,"key") and
- GETL($ttok,"INFGENERIC") and npPushId()
-
-npInfixOperator()== npInfixOp() or
- a:=npState()
- b:=$stok
- npEqKey "'" and npInfixOp() =>
- npPush pfSymb (npPop1 (),tokPosn b)
- npRestore a
- npEqKey "BACKQUOTE" and npInfixOp() =>
- a:=npPop1()
- npPush tokConstruct("idsy",tokPart a,tokPosn a)
- npRestore a
- false
-
-npInfKey s== EQ(CAAR $stok,"key") and MEMQ($ttok,s) and npPushId()
-
-npDDInfKey s==
- npInfKey s or
- a:=npState()
- b:=$stok
- npEqKey "'" and npInfKey s =>
- npPush pfSymb (npPop1 () ,tokPosn b)
- npRestore a
- npEqKey "BACKQUOTE" and npInfKey s =>
- a:=npPop1()
- npPush tokConstruct("idsy",tokPart a,tokPosn a)
- npRestore a
- false
-
-npInfGeneric s== npDDInfKey s and
- (npEqKey "BACKSET" or true)
-
-npConditional f==
- if npEqKey "IF" and (npLogical() or npTrap()) and
- (npEqKey "BACKSET" or true)
- then
- if npEqKey "SETTAB"
- then if npEqKey "THEN"
- then (APPLY(f,nil) or npTrap()) and npElse(f)
- and npEqKey "BACKTAB"
- else npMissing "then"
- else if npEqKey "THEN"
- then (APPLY(f,nil) or npTrap()) and npElse(f)
- else npMissing "then"
- else false
-
-npElse(f)==
- a:=npState()
- if npBacksetElse()
- then (APPLY(f,nil) or npTrap()) and
- npPush pfIf(npPop3(),npPop2(),npPop1())
- else
- npRestore a
- npPush pfIfThenOnly(npPop2(),npPop1())
-
-npBacksetElse()==
- if npEqKey "BACKSET"
- then npEqKey "ELSE"
- else npEqKey "ELSE"
-
-npWConditional f==
- if npConditional f
- then npPush pfTweakIf npPop1()
- else false
-
--- Parsing functions
-
--- peek for keyword s, no advance of token stream
-
-npEqPeek s == EQ(CAAR $stok,"key") and EQ(s,$ttok)
-
--- test for keyword s, if found advance token stream
-
-npEqKey s ==
- EQ(CAAR $stok,"key") and EQ(s,$ttok) and npNext()
-
-$npTokToNames:= ["~","#","[]","{}", "[||]","{||}"]
-
-npId() ==
- EQ(CAAR $stok,"id") =>
- npPush $stok
- npNext()
- EQ(CAAR $stok,"key") and MEMQ($ttok,$npTokToNames)=>
- npPush tokConstruct("id",$ttok,tokPosn $stok)
- npNext()
- false
-
-npSymbolVariable()==
- a:=npState()
- npEqKey "BACKQUOTE" and npId() =>
- a:=npPop1()
- npPush tokConstruct("idsy",tokPart a,tokPosn a)
- npRestore a
- false
-
-npName()==npId() or npSymbolVariable()
-
-npConstTok() ==
- MEMQ(tokType $stok, '(integer string char float command)) =>
- npPush $stok
- npNext()
- npEqPeek "'" =>
- a:=$stok
- b:=npState()
- npNext()
- if
- npPrimary1() and npPush pfSymb(npPop1(),tokPosn a)
- then true
- else
- npRestore b
- false
- false
-
-
-npPrimary1() ==
- npEncAp function npAtom1 or
- npLet() or
- npFix() or
- npMacro() or
- npBPileDefinition() or npDefn() or
- npRule()
-
-npPrimary2()== npEncAp function npAtom2 -- or npBPileDefinition()
- or npAdd(pfNothing()) or npWith(pfNothing())
-
-
-npAtom1()== npPDefinition() or ((npName() or npConstTok() or
- npDollar() or npBDefinition()) and npFromdom())
-
-npAtom2()== (npInfixOperator() or npAmpersand() or npPrefixColon())
- and npFromdom()
-
-npDollar()== npEqPeek "$" and
- npPush tokConstruct("id","$",tokPosn $stok)
- npNext()
-
-npPrefixColon()== npEqPeek "COLON" and
- npPush tokConstruct("id",":",tokPosn $stok)
- npNext()
-
--- silly
-
-npEncAp(f)== APPLY(f,nil) and npAnyNo function npEncl
- and npFromdom()
-
-
-npEncl()== npBDefinition() and npPush pfApplication(npPop2(),npPop1())
-
-npFromdom()==
- npEqKey "$" and (npApplication() or npTrap())
- and npFromdom1 npPop1() and npPush pfFromDom(npPop1(),npPop1())
- or true
-
-npFromdom1 c==
- npEqKey "$" and (npApplication() or npTrap())
- and npFromdom1 npPop1() and npPush pfFromDom(npPop1(),c)
- or npPush c
-
-
-npPrimary()== npPrimary1() or npPrimary2()
-
-npDotted f== APPLY(f,nil) and npAnyNo function npSelector
-
-npSelector()==
- npEqKey "DOT" and (npPrimary() or npTrap()) and
- npPush(pfApplication(npPop2(),npPop1()))
-
-npApplication()==
- npDotted function npPrimary and
- (npApplication2() and
- npPush(pfApplication(npPop2(),npPop1())) or true)
-
-
-npApplication2()==
- npDotted function npPrimary1 and
- (npApplication2() and
- npPush(pfApplication(npPop2(),npPop1())) or true)
-
-npTypedForm1(sy,fn) ==
- npEqKey sy and (npType() or npTrap()) and
- npPush FUNCALL(fn,npPop2(),npPop1())
-
-npTypedForm(sy,fn) ==
- npEqKey sy and (npApplication() or npTrap()) and
- npPush FUNCALL(fn,npPop2(),npPop1())
-
-npRestrict() == npTypedForm("AT",function pfRestrict)
-
-npCoerceTo() == npTypedForm("COERCE",function pfCoerceto)
-
-npColonQuery() == npTypedForm("ATAT",function pfRetractTo)
-
-npPretend() == npTypedForm("PRETEND",function pfPretend)
-
-npTypeStyle()==
- npCoerceTo() or npRestrict() or npPretend() or npColonQuery()
-
-npTypified ()==npApplication() and npAnyNo function npTypeStyle
-
-npTagged() == npTypedForm1("COLON",function pfTagged)
-
-npColon () == npTypified() and npAnyNo function npTagged
-
-npPower() == npRightAssoc('(POWER CARAT),function npColon)
-
-npProduct()==
- npLeftAssoc('(TIMES SLASH BACKSLASH SLASHSLASH
- BACKSLASHBACKSLASH SLASHBACKSLASH BACKSLASHSLASH )
- ,function npPower)
-
-npRemainder()==
- npLeftAssoc('(REM QUO ) ,function npProduct)
-
-npTerm()==
- npInfGeneric '(MINUS PLUS) and (npRemainder()
- and npPush(pfApplication(npPop2(),npPop1())) or true)
- or npRemainder()
-
-
-npSum()==npLeftAssoc('(PLUS MINUS),function npTerm)
-
-npArith()==npLeftAssoc('(MOD),function npSum)
-
-npSegment()== npEqPeek "SEG" and npPushId() and npFromdom()
-
-npInterval()==
- npArith() and
- (npSegment() and ((npEqPeek "BAR"
- and npPush(pfApplication(npPop1(),npPop1()))) or
- (npArith() and npPush(pfInfApplication(npPop2(),npPop2(),npPop1())))
- or npPush(pfApplication(npPop1(),npPop1()))) or true)
-
-npBy()== npLeftAssoc ('(BY),function npInterval)
-
-npAmpersand()== npEqKey "AMPERSAND" and (npName() or npTrap())
-npAmpersandFrom()== npAmpersand() and npFromdom()
-
-npSynthetic()==
- if npBy()
- then
- while npAmpersandFrom() and (npBy() or
- (npPush pfApplication(npPop2(),npPop1());false)) repeat
- npPush pfInfApplication(npPop2(),npPop2(),npPop1())
- true
- else false
-
-npRelation()==
- npLeftAssoc ('(EQUAL NOTEQUAL LT LE GT GE OANGLE CANGLE),
- function npSynthetic)
-
-npQuiver() == npRightAssoc('(ARROW LARROW),function npRelation)
-npDiscrim() == npLeftAssoc ('(CASE HAS), function npQuiver)
-
-npDisjand() == npLeftAssoc('(AND ),function npDiscrim)
-
-npLogical() == npLeftAssoc('(OR ),function npDisjand)
-npSuch() == npLeftAssoc( '(BAR),function npLogical)
-npMatch() == npLeftAssoc ('(IS ISNT ), function npSuch)
-
-npType() == npMatch() and
- a:=npPop1()
- npWith(a) or npPush a
-
-npADD() == npType() and
- a:=npPop1()
- npAdd(a) or npPush a
-
-npConditionalStatement()==npConditional function npQualifiedDefinition
-
-npExpress1()==npConditionalStatement() or npADD()
-
-npCommaBackSet()== npEqKey "COMMA" and (npEqKey "BACKSET" or true)
-
-npExpress()==
- npExpress1() and
- (npIterators() and
- npPush pfCollect (npPop2(),pfListOf npPop1()) or true)
-
-npZeroOrMore f==
- APPLY(f,nil)=>
- a:=$stack
- $stack:=nil
- while APPLY(f,nil) repeat 0
- $stack:=cons(NREVERSE $stack,a)
- npPush cons(npPop2(),npPop1())
- npPush nil
- true
-
-npIterators()==
- npForIn() and npZeroOrMore function npIterator
- and npPush cons(npPop2(),npPop1()) or
- npWhile() and (npIterators() and
- npPush cons(npPop2(),npPop1()) or npPush [npPop1()])
-
-npIterator()== npForIn() or npSuchThat() or npWhile()
-
-npStatement()==
- npExpress() or
- npLoop() or
- npIterate() or
- npReturn() or
- npBreak() or
- npFree() or
- npImport() or
- npInline() or
- npLocal() or
- npExport() or
- npTyping() or
- npVoid()
-
-npBackTrack(p1,p2,p3)==
- a:=npState()
- APPLY(p1,nil) =>
- npEqPeek p2 =>
- npRestore a
- APPLY(p3,nil) or npTrap()
- true
- false
-
-npMDEF()== npBackTrack(function npStatement,"MDEF",function npMDEFinition)
-
-npMDEFinition() == npPP function npMdef
-
-npAssign()== npBackTrack(function npMDEF,"BECOMES",function npAssignment)
-
-npAssignment()==
- npAssignVariable() and
- (npEqKey "BECOMES" or npTrap()) and
- (npGives() or npTrap()) and
- npPush pfAssign (npPop2(),npPop1())
-
-npAssignVariableName()==npApplication() and
- a:=npPop1()
- if pfId? a
- then
- (npPush a and npDecl() or npPush pfTyped(npPop1(),pfNothing()))
- else npPush a
-
-npAssignVariable()== npColon() and npPush pfListOf [npPop1()]
-
-npAssignVariablelist()== npListing function npAssignVariableName
-
-npExit()== npBackTrack(function npAssign,"EXIT",function npPileExit)
-
-npPileExit()==
- npAssign() and (npEqKey "EXIT" or npTrap()) and
- (npStatement() or npTrap())
- and npPush pfExit (npPop2(),npPop1())
-
-npGives()== npBackTrack(function npExit,"GIVES",function npLambda)
-
-npDefinitionOrStatement()==
- npBackTrack(function npGives,"DEF",function npDef)
-
-npVoid()== npAndOr("DO",function npStatement,function pfNovalue)
-
-npReturn()==
- npEqKey "RETURN" and
- (npExpress() or npPush pfNothing()) and
- (npEqKey "FROM" and (npName() or npTrap()) and
- npPush pfReturn (npPop2(),npPop1()) or
- npPush pfReturnNoName npPop1())
-npLoop()==
- npIterators() and
- (npCompMissing "REPEAT" and
- (npAssign() or npTrap()) and
- npPush pfLp(npPop2(),npPop1()))
- or
- npEqKey "REPEAT" and (npAssign() or npTrap()) and
- npPush pfLoop1 npPop1 ()
-
-npSuchThat()==npAndOr("BAR",function npLogical,function pfSuchthat)
-
-npWhile()==npAndOr ("WHILE",function npLogical,function pfWhile)
-
-npForIn()==
- npEqKey "FOR" and (npVariable() or npTrap()) and (npCompMissing "IN")
- and ((npBy() or npTrap()) and
- npPush pfForin(npPop2(),npPop1()))
-
-npBreak()==
- npEqKey "BREAK" and npPush pfBreak pfNothing ()
-
-npIterate()==
- npEqKey "ITERATE" and npPush pfIterate pfNothing ()
-
-npQualType()==
- npType() and
- npPush pfQualType(npPop1(),pfNothing())
-
-npSQualTypelist()== npListing function npQualType
- and npPush pfParts npPop1 ()
-
-npQualTypelist()== npPC function npSQualTypelist
- and npPush pfUnSequence npPop1 ()
-
-npImport()==npAndOr("IMPORT",function npQualTypelist,function pfImport)
-
-npInline()==npAndOr("INLINE",function npQualTypelist,function pfInline)
-
-npLocalDecl()== npEqKey "COLON" and (npType() or npTrap()) and
- npPush pfSpread (pfParts npPop2(),npPop1()) or
- npPush pfSpread (pfParts npPop1(),pfNothing())
-
-npLocalItem()==npTypeVariable() and npLocalDecl()
-
-npLocalItemlist()== npPC function npSLocalItem
- and npPush pfUnSequence npPop1 ()
-
-npSLocalItem()== npListing function npLocalItem
- and npPush pfAppend pfParts npPop1()
-
-npFree()== npEqKey "FREE" and (npLocalItemlist() or npTrap())
- and npPush pfFree npPop1()
-
-npLocal()== npEqKey "local" and (npLocalItemlist() or npTrap())
- and npPush pfLocal npPop1()
-npExport()== npEqKey "EXPORT" and (npLocalItemlist() or npTrap())
- and npPush pfExport npPop1()
-
-npLet()== npLetQualified function npDefinitionOrStatement
-
-npDefn()== npEqKey "DEFN" and npPP function npDef
-
-npFix()== npEqKey "FIX" and npPP function npDef
- and npPush pfFix npPop1 ()
-
-npMacro()== npEqKey "MACRO" and npPP function npMdef
-
-npRule()== npEqKey "RULE" and npPP function npSingleRule
-
-npAdd(extra)==
- npEqKey "ADD" and
- a:=npState()
- npDefinitionOrStatement() or npTrap()
- npEqPeek "IN" =>
- npRestore a
- (npVariable() or npTrap()) and
- npCompMissing "IN" and
- (npDefinitionOrStatement() or npTrap()) and
- npPush pfAdd(npPop2(),npPop1(),extra)
- npPush pfAdd(pfNothing(),npPop1(),extra)
-
-npDefaultValue()==
- npEqKey "DEFAULT" and
- (npDefinitionOrStatement() or npTrap())
- and npPush [pfAdd(pfNothing(),npPop1(),pfNothing())]
-
-npWith(extra)==
- npEqKey "WITH" and
- a:=npState()
- npCategoryL() or npTrap()
- npEqPeek "IN" =>
- npRestore a
- (npVariable() or npTrap()) and
- npCompMissing "IN" and
- (npCategoryL() or npTrap()) and
- npPush pfWith(npPop2(),npPop1(),extra)
- npPush pfWith(pfNothing(),npPop1(),extra)
-
-npCategoryL()== npCategory() and npPush pfUnSequence npPop1 ()
-
-pfUnSequence x==
- pfSequence? x => pfListOf pfAppend pf0SequenceArgs x
- pfListOf x
-
-npCategory()== npPP function npSCategory
-
-npSCategory()==
- if npWConditional function npCategoryL
- then npPush [npPop1()]
- else
- if npDefaultValue()
- then true
- else
- a:=npState()
- if npPrimary()
- then if npEqPeek "COLON"
- then
- npRestore a
- npSignature()
- else
- npRestore a
- npApplication() and npPush [pfAttribute (npPop1())]
- or npTrap()
-
- else false
-
-
-npSignatureDefinee()==
- npName() or npInfixOperator() or npPrefixColon()
-
-
-npSigDecl()== npEqKey "COLON" and (npType() or npTrap()) and
- npPush pfSpread (pfParts npPop2(),npPop1())
-
-npSigItem()==npTypeVariable() and (npSigDecl() or npTrap())
-
-npSigItemlist()== npListing function npSigItem
- and npPush pfListOf pfAppend pfParts npPop1()
-
-npSignature()==
- npSigItemlist() and
- npPush pfWDec(pfNothing(),npPop1())
-
-npSemiListing (p)==
- npListofFun(p,function npSemiBackSet,function pfAppend)
-
-npSemiBackSet()== npEqKey "SEMICOLON" and (npEqKey "BACKSET" or true)
-npDecl()== npEqKey "COLON" and (npType() or npTrap()) and
- npPush pfTyped (npPop2(),npPop1())
-
-npVariableName()==npName() and
- (npDecl() or npPush pfTyped(npPop1(),pfNothing()))
-
-npVariable()== npParenthesized function npVariablelist or
- (npVariableName() and npPush pfListOf [npPop1()])
-
-npVariablelist()== npListing function npVariableName
-
-npListing (p)==npList(p,"COMMA",function pfListOf)
-npQualified(f)==
- if FUNCALL f
- then
- while npEqKey "WHERE" and (npDefinition() or npTrap()) repeat
- npPush pfWhere(npPop1(),npPop1())
- true
- else npLetQualified f
-
-npLetQualified f==
- npEqKey "LET" and
- (npDefinition() or npTrap()) and
- npCompMissing "IN" and
- (FUNCALL f or npTrap()) and
- npPush pfWhere(npPop2(),npPop1())
-
-
-npQualifiedDefinition()==
- npQualified function npDefinitionOrStatement
-
-npTuple (p)==
- npListofFun(p,function npCommaBackSet,function pfTupleListOf)
-npComma()== npTuple function npQualifiedDefinition
-
-npQualDef()== npComma() and npPush [npPop1()]
-
-npDefinitionlist ()==npSemiListing(function npQualDef)
-
-npPDefinition ()==
- npParenthesized function npDefinitionlist and
- npPush pfEnSequence npPop1()
-
-npBDefinition()== npPDefinition() or
- npBracketed function npDefinitionlist
-
-npPileDefinitionlist()==
- npListAndRecover function npDefinitionlist
- and npPush pfAppend npPop1()
-
-
-npTypeVariable()== npParenthesized function npTypeVariablelist or
- npSignatureDefinee() and npPush pfListOf [npPop1()]
-
-npTypeVariablelist()== npListing function npSignatureDefinee
-
-npTyping()==
- npEqKey "DEFAULT" and (npDefaultItemlist() or npTrap())
- and npPush pfTyping npPop1()
-
-npDefaultItemlist()== npPC function npSDefaultItem
- and npPush pfUnSequence npPop1 ()
-
-npDefaultDecl()== npEqKey "COLON" and (npType() or npTrap()) and
- npPush pfSpread (pfParts npPop2(),npPop1())
-
-npDefaultItem()==npTypeVariable() and (npDefaultDecl() or npTrap())
-
-npSDefaultItem()== npListing function npDefaultItem
- and npPush pfAppend pfParts npPop1()
-
-npBPileDefinition()==
- npPileBracketed function npPileDefinitionlist
- and npPush pfSequence pfListOf npPop1 ()
-
-
-npLambda()==
- (npVariable() and
- ((npLambda() or npTrap()) and
- npPush pfLam(npPop2(),npPop1()))) or
- npEqKey "GIVES" and (npDefinitionOrStatement() or npTrap()) or
- npEqKey "COLON" and (npType() or npTrap()) and
- npEqKey "GIVES" and (npDefinitionOrStatement() or npTrap())
- and
- npPush pfReturnTyped(npPop2(),npPop1())
-
-npDef()==
- npMatch() =>
- [op,arg,rt]:= pfCheckItOut(npPop1())
- npDefTail() or npTrap()
- body:=npPop1()
- null arg => npPush pfDefinition (op,body)
- npPush pfDefinition (op,pfPushBody(rt,arg,body))
- false
-
---npDefTail()== npEqKey "DEF" and npDefinitionOrStatement()
-npDefTail()== (npEqKey "DEF" or npEqKey "MDEF") and npDefinitionOrStatement()
-
-npMdef()==
- npQuiver() =>
- [op,arg]:= pfCheckMacroOut(npPop1())
- npDefTail() or npTrap()
- body:=npPop1()
- null arg => npPush pfMacro (op,body)
- npPush pfMacro (op,pfPushMacroBody(arg,body))
- false
-
-
-npSingleRule()==
- npQuiver() =>
- npDefTail() or npTrap()
- npPush pfRule (npPop2(),npPop1())
- false
-
-npDefinitionItem()==
- npTyping() or
- npImport() or
- a:=npState()
- npStatement() =>
- npEqPeek "DEF" =>
- npRestore a
- npDef()
- npRestore a
- npMacro() or npDefn()
- npTrap()
-
-npDefinition()== npPP function npDefinitionItem
- and npPush pfSequenceToList npPop1 ()
-
-pfSequenceToList x==
- pfSequence? x => pfSequenceArgs x
- pfListOf [x]
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}