diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet index b090abe..fccc9a7 100644 --- a/books/bookvol9.pamphlet +++ b/books/bookvol9.pamphlet @@ -399,12 +399,10 @@ says that such files should not be created. The default is {\tt )nolibrary} for the new Aldor compiler and for the old system compiler are completely different. -The {\tt )vartrace} option causes the compiler to generate -extra code for the constructor to support conditional tracing of -variable assignments. (see -\ref{ugSysCmdtrace} on page~\pageref{ugSysCmdtrace}). Without -this option, this code is suppressed and one cannot use -the {\tt )vars} option for the trace command. +The {\tt )vartrace} option causes the compiler to generate extra code +for the constructor to support conditional tracing of variable +assignments. Without this option, this code is suppressed and one +cannot use the {\tt )vars} option for the trace command. The {\tt )constructor} option is used to specify a particular constructor to compile. @@ -427,6 +425,200 @@ the spad compiler does when it encounters an error. should stop at the first error. The value of the {\tt )set break} variable then controls what happens. +\section{Operator Precedence Table Initialization} +\begin{verbatim} +; PURPOSE: This file sets up properties which are used by the Boot lexical +; analyzer for bottom-up recognition of operators. Also certain +; other character-class definitions are included, as well as +; table accessing functions. +; +; ORGANIZATION: Each section is organized in terms of Creation and Access code. +; +; 1. Led and Nud Tables +; 2. GLIPH Table +; 3. RENAMETOK Table +; 4. GENERIC Table +; 5. Character syntax class predicates +\end{verbatim} +\subsection{LED and NUD Tables} +\begin{verbatim} +; **** 1. LED and NUD Tables + +; ** TABLE PURPOSE + +; Led and Nud have to do with operators. An operator with a Led property takes +; an operand on its left (infix/suffix operator). + +; An operator with a Nud takes no operand on its left (prefix/nilfix). +; Some have both (e.g. - ). This terminology is from the Pratt parser. +; The translator for Scratchpad II is a modification of the Pratt parser which +; branches to special handlers when it is most convenient and practical to +; do so (Pratt's scheme cannot handle local contexts very easily). + +; Both LEDs and NUDs have right and left binding powers. This is meaningful +; for prefix and infix operators. These powers are stored as the values of +; the LED and NUD properties of an atom, if the atom has such a property. +; The format is: + +; > + +; where the Special-Handler is the name of a function to be evaluated when that +; keyword is encountered. + +; The default values of Left and Right Binding-Power are NIL. NIL is a +; legitimate value signifying no precedence. If the Special-Handler is NIL, +; this is just an ordinary operator (as opposed to a surfix operator like +; if-then-else). +; +; The Nud value gives the precedence when the operator is a prefix op. +; The Led value gives the precedence when the operator is an infix op. +; Each op has 2 priorities, left and right. +; If the right priority of the first is greater than or equal to the +; left priority of the second then collect the second operator into +; the right argument of the first operator. + +\end{verbatim} +<>= +; ** TABLE CREATION + +(defun makenewop (x y) (makeop x y '|PARSE-NewKEY|)) + +(defun makeop (x y keyname) + (if (or (not (cdr x)) (numberp (second x))) + (setq x (cons (first x) x))) + (if (and (alpha-char-p (elt (stringimage (first x)) 0)) + (not (member (first x) (eval keyname)))) + (set keyname (cons (first x) (eval keyname)))) + (makeprop (first x) y x) + (second x)) + +(setq |PARSE-NewKEY| nil) ;;list of keywords + +(mapcar #'(LAMBDA(J) (MAKENEWOP J '|Led|)) + '((* 800 801) (|rem| 800 801) (|mod| 800 801) + (|quo| 800 801) (|div| 800 801) + (/ 800 801) (** 900 901) (^ 900 901) + (|exquo| 800 801) (+ 700 701) + (\- 700 701) (\-\> 1001 1002) (\<\- 1001 1002) + (\: 996 997) (\:\: 996 997) + (\@ 996 997) (|pretend| 995 996) + (\.) (\! \! 1002 1001) + (\, 110 111) + (\; 81 82 (|PARSE-SemiColon|)) + (\< 400 400) (\> 400 400) + (\<\< 400 400) (\>\> 400 400) + (\<= 400 400) (\>= 400 400) + (= 400 400) (^= 400 400) + (\~= 400 400) + (|in| 400 400) (|case| 400 400) + (|add| 400 120) (|with| 2000 400 (|PARSE-InfixWith|)) + (|has| 400 400) + (|where| 121 104) ; must be 121 for SPAD, 126 for boot--> nboot + (|when| 112 190) + (|otherwise| 119 190 (|PARSE-Suffix|)) + (|is| 400 400) (|isnt| 400 400) + (|and| 250 251) (|or| 200 201) + (/\\ 250 251) (\\/ 200 201) + (\.\. SEGMENT 401 699 (|PARSE-Seg|)) + (=\> 123 103) + (+-\> 995 112) + (== DEF 122 121) + (==\> MDEF 122 121) + (\| 108 111) ;was 190 190 + (\:- LETD 125 124) (\:= LET 125 124))) + +(mapcar #'(LAMBDA (J) (MAKENEWOP J `|Nud|)) + '((|for| 130 350 (|PARSE-Loop|)) + (|while| 130 190 (|PARSE-Loop|)) + (|until| 130 190 (|PARSE-Loop|)) + (|repeat| 130 190 (|PARSE-Loop|)) + (|import| 120 0 (|PARSE-Import|) ) + (|unless|) + (|add| 900 120) + (|with| 1000 300 (|PARSE-With|)) + (|has| 400 400) + (\- 701 700) ; right-prec. wants to be -1 + left-prec +;; (\+ 701 700) + (\# 999 998) + (\! 1002 1001) + (\' 999 999 (|PARSE-Data|)) + (\<\< 122 120 (|PARSE-LabelExpr|)) + (\>\>) + (^ 260 259 NIL) + (\-\> 1001 1002) + (\: 194 195) + (|not| 260 259 NIL) + (\~ 260 259 nil) + (\= 400 700) + (|return| 202 201 (|PARSE-Return|)) + (|leave| 202 201 (|PARSE-Leave|)) + (|exit| 202 201 (|PARSE-Exit|)) + (|from|) + (|iterate|) + (|yield|) + (|if| 130 0 (|PARSE-Conditional|)) ; was 130 + (\| 0 190) + (|suchthat|) + (|then| 0 114) + (|else| 0 114))) + +@ +\section{Gliph Table} +Gliphs are symbol clumps. The gliph property of a symbol gives +the tree describing the tokens which begin with that symbol. +The token reader uses the gliph property to determine the longest token. +Thus [[:=]] is read as one token not as [[:]] followed by [[=]]. + +<>= +(mapcar #'(lambda (x) (makeprop (car x) 'gliph (cdr x))) + `( + ( \| (\)) ) + ( * (*) ) + ( \( (<) (\|) ) + ( + (- (>)) ) + ( - (>) ) + ( < (=) (<) ) + ;; ( / (\\) ) breaks */xxx + ( \\ (/) ) + ( > (=) (>) (\))) + ( = (= (>)) (>) ) + ( \. (\.) ) + ( ^ (=) ) + ( \~ (=) ) + ( \: (=) (-) (\:)))) + +@ +\subsection{Rename Token Table} +RENAMETOK defines alternate token strings which can be used for different +keyboards which define equivalent tokens. +<>= +(mapcar + #'(lambda (x) (makeprop (car x) 'renametok (cadr x)) (makenewop x nil)) + '((\(\| \[) ; (| |) means [] + (\|\) \]) + (\(< \{) ; (< >) means {} + (>\) \}))) + +@ +\subsection{Generic function table} +GENERIC operators be suffixed by [[$]] qualifications in SPAD code. +[[$]] is then followed by a domain label, such as I for Integer, which +signifies which domain the operator refers to. For example [[+$Integer]] +is [[+]] for Integers. +<>= +(mapcar #'(lambda (x) (makeprop x 'generic 'true)) + '(- = * |rem| |mod| |quo| |div| / ** |exquo| + - < > <= >= ^= )) + +@ +\subsection{Character Syntax Table} +<>= +(defun specialcasesyntax () (or (and (char= tok '#\#) (digitp chr)))) + +(defun terminator (chr) + (member chr '(#\ #\( #\) #\. #\; #\, #\Return)) :test #'char=) + +@ + \chapter{The Parser} \section{EQ.spad} We will explain the compilation function using the file {\tt EQ.spad}. @@ -646,21 +838,25 @@ Equation(S: Type): public == private where \end{verbatim} +\defdollar{index} <>= (defvar $index 0 "File line number of most recently read line") @ +\defdollar{linelist} <>= (defvar $linelist nil "Stack of preparsed lines") @ +\defdollar{echolinestack} <>= (defvar $echolinestack nil "Stack of lines to list") @ +\defdollar{preparse-last-line} <>= (defvar $preparse-last-line nil "Most recently read line") @@ -7776,8 +7972,8 @@ IteratorTail: ('repeat' ! / Iterator*) ; @ \defun{PARSE-Primary}{PARSE-Primary} -\calls{PARSE-Primary}{} -\calls{PARSE-Primary}{} +\calls{PARSE-Primary}{PARSE-Float} +\calls{PARSE-Primary}{PARSE-PrimaryNoFloat} <>= (defun |PARSE-Primary| () (or (|PARSE-Float|) (|PARSE-PrimaryNoFloat|))) @@ -8531,8 +8727,7 @@ if X matches initial segment of inputstream. \calls{match-string}{current-char} \calls{match-string}{initial-substring-p} \calls{match-string}{subseq} -\calls{match-string}{line-buffer} -\calls{match-string}{line-current-index} +\usesstruct{match-string}{line} \uses{match-string}{line} <>= (defun match-string (x) @@ -8554,10 +8749,6 @@ If it is successful, advance inputstream past X. \calls{match-advance-string}{line-current-index} \calls{match-advance-string}{line-past-end-p} \calls{match-advance-string}{line-current-char} -\calls{match-advance-string}{line-buffer} -\calls{match-advance-string}{make-token} -\calls{match-advance-string}{} -\calls{match-advance-string}{} \usesstruct{match-advance-string}{token} \usesstruct{match-advance-string}{line} <>= @@ -8626,7 +8817,6 @@ If it is successful, advance inputstream past X. @ \defun{escape-keywords}{escape-keywords} -\calls{escape-keywords}{} <>= (defun escape-keywords (pname id) (if (member id keywords) @@ -8636,7 +8826,7 @@ If it is successful, advance inputstream past X. @ \defun{underscore}{underscore} -\calls{underscore}{} +\calls{underscore}{vector-push} <>= (defun underscore (string) (if (every #'alpha-char-p string) @@ -8740,7 +8930,7 @@ This returns the next token if it has equal type and (optionally) equal symbol. @ \defun{make-symbol-of}{make-symbol-of} -\calls{make-symbol-of}{token-symbol} +\usesstruct{make-symbol-of}{token} <>= (defun make-symbol-of (token) (let ((u (and token (token-symbol token)))) @@ -8835,8 +9025,7 @@ This makes the next token be the current token. \defun{current-char}{current-char} This returns the current character of the line, initially blank for an unread line. -\calls{current-char}{line-past-end-p} -\calls{current-char}{line-current-char} +\usesstruct{current-char}{line} \uses{current-char}{current-line} <>= (defun current-char () @@ -8888,6 +9077,7 @@ equivalent to. \uses{meta-syntax-error}{meta-error-handler} <>= (defun meta-syntax-error (&optional (wanted nil) (parsing nil)) + (declare (special meta-error-handler)) (funcall meta-error-handler wanted parsing)) @ @@ -8953,6 +9143,7 @@ the stack, then stack a NIL. Return the value of prod. @ \defmacro{must} +\calls{must}{meta-syntax-error} <>= (defmacro must (dothis &optional (this-is nil) (in-rule nil)) `(or ,dothis (meta-syntax-error ,this-is ,in-rule))) @@ -8978,7 +9169,6 @@ E.G., {\tt (Star IDs (parse-id))} with A B C will stack (3 IDs (A B C)), where (parse-id) would stack (1 ID (A)) when applied once. \calls{star}{stack-size} \calls{star}{push-reduction} -\calls{star}{push} \calls{star}{pop-stack-1} <>= (defmacro star (lab prod) @@ -9054,6 +9244,12 @@ Return a pointer to the Nth cons of X, counting 0 as the first cons. (and (> n 0) (eq (char str (1- n)) xcape))) @ + +\defdollar{comblocklist} +<>= +(defvar $comblocklist nil "a dynamic lists of comments for this block") + +@ \defun{fincomblock}{fincomblock} \begin{itemize} @@ -9132,6 +9328,8 @@ Return a pointer to the Nth cons of X, counting 0 as the first cons. <>= (defun nonblankloc (str) (position-if-not #'blankp str)) + +@ \defun{parseprint}{parseprint} <>= @@ -9619,7 +9817,7 @@ combination of operations was requested. For this case we see: \end{verbatim} \defun{compilerDoit}{compilerDoit} -\calls{compilerDoit}{/rq(5)} +\calls{compilerDoit}{/rq} \calls{compilerDoit}{/rf(5)} \calls{compilerDoit}{member(5)} \calls{compilerDoit}{sayBrightly} @@ -9658,7 +9856,7 @@ This function simply calls {\bf \verb|/rf-1|}. \end{verbatim} \defun{/RQ,LIB}{/RQ,LIB} -\calls{/RQ,LIB}{/rf-1(5)} +\calls{/RQ,LIB}{/rf-1} \uses{/RQ,LIB}{echo-meta(5)} \usesdollar{/RQ,LIB}{lisplib} <>= @@ -11845,10 +12043,17 @@ if \verb|$InteractiveMode| then use a null outputstream <> +<> +<> +<> +<> +<> + <> <> <> + <> <> <> diff --git a/changelog b/changelog index 7639d25..ff55f77 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +20101210 tpd src/axiom-website/patches.html 20101210.01.tpd.patch +20101210 tpd src/interp/newaux.lisp remove newaux.lisp +20101210 tpd src/interp/Makefile merge and remove newaux.lisp +20101210 tpd books/bookvol9 merge and remove newaux.lisp 20101209 tpd src/axiom-website/patches.html 20101209.01.tpd.patch 20101209 tpd src/input/series.input add series to polynomial example 20101208 tpd src/axiom-website/patches.html 20101208.01.tpd.patch diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 643deb6..3b9d23b 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -3309,5 +3309,7 @@ books/bookvol9 treeshake compiler
books/bookvol9 treeshake compiler
20101209.01.tpd.patch src/input/series.input add series to polynomial example
+20101210.01.tpd.patch +books/bookvol9 merge and remove newaux.lisp
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet index ba96091..566dad7 100644 --- a/src/interp/Makefile.pamphlet +++ b/src/interp/Makefile.pamphlet @@ -164,7 +164,7 @@ OBJS= ${OUT}/vmlisp.${O} \ ${OUT}/lisplib.${O} \ ${OUT}/match.${O} \ ${OUT}/msgdb.${O} ${OUT}/nci.${O} \ - ${OUT}/newaux.${O} ${OUT}/newfort.${O} \ + ${OUT}/newfort.${O} \ ${OUT}/nrunfast.${O} \ ${OUT}/nrungo.${O} ${OUT}/nrunopt.${O} \ ${OUT}/nruntime.${O} \ @@ -590,7 +590,6 @@ of the form: ${DEPSYS}: ${DEP} ${OUT}/sys-pkg.${LISP} ${OUT}/nocompil.${LISP} \ ${OUT}/bookvol5.${LISP} ${OUT}/util.${LISP} \ ${OUT}/parsing.${LISP} \ - ${OUT}/newaux.${LISP} \ ${OUT}/g-boot.lisp ${OUT}/c-util.lisp \ ${OUT}/g-util.lisp \ ${OUT}/clam.lisp \ @@ -609,10 +608,6 @@ ${DEPSYS}: ${DEP} ${OUT}/sys-pkg.${LISP} ${OUT}/nocompil.${LISP} \ '(compile-file "${OUT}/parsing.${LISP}"' \ ':output-file "${OUT}/parsing.${O}"))' >> ${OUT}/makedep.lisp @ echo '(load "${OUT}/parsing")' >> ${OUT}/makedep.lisp - @ echo '(unless (probe-file "${OUT}/newaux.${O}")' \ - '(compile-file "${OUT}/newaux.${LISP}"' \ - ':output-file "${OUT}/newaux.${O}"))' >> ${OUT}/makedep.lisp - @ echo '(load "${OUT}/newaux")' >> ${OUT}/makedep.lisp @ echo '(unless (probe-file "${OUT}/clam.${O}")' \ '(compile-file "${OUT}/clam.lisp"' \ ':output-file "${OUT}/clam.${O}"))' >> ${OUT}/makedep.lisp @@ -853,35 +848,6 @@ ${MID}/hypertex.lisp: ${IN}/hypertex.lisp.pamphlet @ -\subsection{newaux.lisp \cite{25}} -<>= -${OUT}/newaux.${O}: ${MID}/newaux.lisp - @ echo 79 making ${OUT}/newaux.${O} from ${MID}/newaux.lisp - @ ( cd ${MID} ; \ - if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "${MID}/newaux.lisp"' \ - ':output-file "${OUT}/newaux.${O}") (${BYE}))' | ${DEPSYS} ; \ - else \ - echo '(progn (compile-file "${MID}/newaux.lisp"' \ - ':output-file "${OUT}/newaux.${O}") (${BYE}))' | ${DEPSYS} \ - >${TMP}/trace ; \ - fi ) - -@ -<>= -${OUT}/newaux.${LISP}: ${MID}/newaux.lisp - @ echo 80 making ${OUT}/newaux.${LISP} from ${MID}/newaux.lisp - @cp ${MID}/newaux.lisp ${OUT}/newaux.${LISP} - -@ -<>= -${MID}/newaux.lisp: ${IN}/newaux.lisp.pamphlet - @ echo 81 making ${MID}/newaux.lisp from ${IN}/newaux.lisp.pamphlet - @ (cd ${MID} ; \ - ${TANGLE} ${IN}/newaux.lisp.pamphlet >newaux.lisp ) - -@ - \subsection{nocompil.lisp \cite{27}} <>= ${OUT}/nocompil.${LISP}: ${MID}/nocompil.lisp @@ -3533,10 +3499,6 @@ clean: <> <> -<> -<> -<> - <> <> diff --git a/src/interp/newaux.lisp.pamphlet b/src/interp/newaux.lisp.pamphlet deleted file mode 100644 index bb1c50a..0000000 --- a/src/interp/newaux.lisp.pamphlet +++ /dev/null @@ -1,254 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/interp newaux.lisp} -\author{Timothy Daly} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{Operator Precedence Table Initialization} -\begin{verbatim} -; PURPOSE: This file sets up properties which are used by the Boot lexical -; analyzer for bottom-up recognition of operators. Also certain -; other character-class definitions are included, as well as -; table accessing functions. -; -; ORGANIZATION: Each section is organized in terms of Creation and Access code. -; -; 1. Led and Nud Tables -; 2. GLIPH Table -; 3. RENAMETOK Table -; 4. GENERIC Table -; 5. Character syntax class predicates -\end{verbatim} -\subsection{LED and NUD Tables} -\begin{verbatim} -; **** 1. LED and NUD Tables - -; ** TABLE PURPOSE - -; Led and Nud have to do with operators. An operator with a Led property takes -; an operand on its left (infix/suffix operator). - -; An operator with a Nud takes no operand on its left (prefix/nilfix). -; Some have both (e.g. - ). This terminology is from the Pratt parser. -; The translator for Scratchpad II is a modification of the Pratt parser which -; branches to special handlers when it is most convenient and practical to -; do so (Pratt's scheme cannot handle local contexts very easily). - -; Both LEDs and NUDs have right and left binding powers. This is meaningful -; for prefix and infix operators. These powers are stored as the values of -; the LED and NUD properties of an atom, if the atom has such a property. -; The format is: - -; > - -; where the Special-Handler is the name of a function to be evaluated when that -; keyword is encountered. - -; The default values of Left and Right Binding-Power are NIL. NIL is a -; legitimate value signifying no precedence. If the Special-Handler is NIL, -; this is just an ordinary operator (as opposed to a surfix operator like -; if-then-else). -; -; The Nud value gives the precedence when the operator is a prefix op. -; The Led value gives the precedence when the operator is an infix op. -; Each op has 2 priorities, left and right. -; If the right priority of the first is greater than or equal to the -; left priority of the second then collect the second operator into -; the right argument of the first operator. - -\end{verbatim} -<>= -; ** TABLE CREATION - -(defun MAKENEWOP (X Y) (MAKEOP X Y '|PARSE-NewKEY|)) - -(defun MAKEOP (X Y KEYNAME) - (if (OR (NOT (CDR X)) (NUMBERP (SECOND X))) - (SETQ X (CONS (FIRST X) X))) - (if (AND (alpha-char-p (ELT (STRINGIMAGE (FIRST X)) 0)) - (NOT (MEMBER (FIRST X) (EVAL KEYNAME)))) - (SET KEYNAME (CONS (FIRST X) (EVAL KEYNAME)))) - (MAKEPROP (FIRST X) Y X) - (SECOND X)) - -(setq |PARSE-NewKEY| nil) ;;list of keywords - -(mapcar #'(LAMBDA(J) (MAKENEWOP J '|Led|)) - '((* 800 801) (|rem| 800 801) (|mod| 800 801) - (|quo| 800 801) (|div| 800 801) - (/ 800 801) (** 900 901) (^ 900 901) - (|exquo| 800 801) (+ 700 701) - (\- 700 701) (\-\> 1001 1002) (\<\- 1001 1002) - (\: 996 997) (\:\: 996 997) - (\@ 996 997) (|pretend| 995 996) - (\.) (\! \! 1002 1001) - (\, 110 111) - (\; 81 82 (|PARSE-SemiColon|)) - (\< 400 400) (\> 400 400) - (\<\< 400 400) (\>\> 400 400) - (\<= 400 400) (\>= 400 400) - (= 400 400) (^= 400 400) - (\~= 400 400) - (|in| 400 400) (|case| 400 400) - (|add| 400 120) (|with| 2000 400 (|PARSE-InfixWith|)) - (|has| 400 400) - (|where| 121 104) ; must be 121 for SPAD, 126 for boot--> nboot - (|when| 112 190) - (|otherwise| 119 190 (|PARSE-Suffix|)) - (|is| 400 400) (|isnt| 400 400) - (|and| 250 251) (|or| 200 201) - (/\\ 250 251) (\\/ 200 201) - (\.\. SEGMENT 401 699 (|PARSE-Seg|)) - (=\> 123 103) - (+-\> 995 112) - (== DEF 122 121) - (==\> MDEF 122 121) - (\| 108 111) ;was 190 190 - (\:- LETD 125 124) (\:= LET 125 124))) - -(mapcar #'(LAMBDA (J) (MAKENEWOP J `|Nud|)) - '((|for| 130 350 (|PARSE-Loop|)) - (|while| 130 190 (|PARSE-Loop|)) - (|until| 130 190 (|PARSE-Loop|)) - (|repeat| 130 190 (|PARSE-Loop|)) - (|import| 120 0 (|PARSE-Import|) ) - (|unless|) - (|add| 900 120) - (|with| 1000 300 (|PARSE-With|)) - (|has| 400 400) - (\- 701 700) ; right-prec. wants to be -1 + left-prec -;; (\+ 701 700) - (\# 999 998) - (\! 1002 1001) - (\' 999 999 (|PARSE-Data|)) - (\<\< 122 120 (|PARSE-LabelExpr|)) - (\>\>) - (^ 260 259 NIL) - (\-\> 1001 1002) - (\: 194 195) - (|not| 260 259 NIL) - (\~ 260 259 nil) - (\= 400 700) - (|return| 202 201 (|PARSE-Return|)) - (|leave| 202 201 (|PARSE-Leave|)) - (|exit| 202 201 (|PARSE-Exit|)) - (|from|) - (|iterate|) - (|yield|) - (|if| 130 0 (|PARSE-Conditional|)) ; was 130 - (\| 0 190) - (|suchthat|) - (|then| 0 114) - (|else| 0 114))) - -@ -\section{Gliph Table} -Gliphs are symbol clumps. The gliph property of a symbol gives -the tree describing the tokens which begin with that symbol. -The token reader uses the gliph property to determine the longest token. -Thus [[:=]] is read as one token not as [[:]] followed by [[=]]. - -<>= -(mapcar #'(lambda (x) (makeprop (car x) 'gliph (cdr x))) - `( - ( \| (\)) ) - ( * (*) ) - ( \( (<) (\|) ) - ( + (- (>)) ) - ( - (>) ) - ( < (=) (<) ) - ;; ( / (\\) ) breaks */xxx - ( \\ (/) ) - ( > (=) (>) (\))) - ( = (= (>)) (>) ) - ( \. (\.) ) - ( ^ (=) ) - ( \~ (=) ) - ( \: (=) (-) (\:)))) - -@ -\subsection{Rename Token Table} -RENAMETOK defines alternate token strings which can be used for different -keyboards which define equivalent tokens. -<>= -(mapcar - #'(lambda (x) (MAKEPROP (CAR X) 'RENAMETOK (CADR X)) (MAKENEWOP X NIL)) - '((\(\| \[) ; (| |) means [] - (\|\) \]) - (\(< \{) ; (< >) means {} - (>\) \}))) - -@ -\subsection{Generic function table} -GENERIC operators be suffixed by [[$]] qualifications in SPAD code. -[[$]] is then followed by a domain label, such as I for Integer, which -signifies which domain the operator refers to. For example [[+$Integer]] -is [[+]] for Integers. -<>= -(mapcar #'(lambda (x) (MAKEPROP X 'GENERIC 'TRUE)) - '(- = * |rem| |mod| |quo| |div| / ** |exquo| + - < > <= >= ^= )) - -@ -\subsection{Character Syntax Table} -<>= -(defun SPECIALCASESYNTAX () (OR (AND (char= TOK '#\#) (DIGITP CHR)))) - -(defun TERMINATOR (CHR) - (member CHR '(#\ #\( #\) #\. #\; #\, #\Return)) :test #'char=) - -@ -\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. - -@ -<<*>>= -<> - -(in-package "BOOT") - -<> -<> -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document}