diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet index 5f530fd..9663d36 100644 --- a/books/bookvol9.pamphlet +++ b/books/bookvol9.pamphlet @@ -4536,6 +4536,25 @@ The current input line. \end{chunk} +\defun{Advance-Char}{Advance-Char} +\calls{Advance-Char}{Line-At-End-P} +\calls{Advance-Char}{Line-Advance-Char} +\calls{Advance-Char}{next-line} +\calls{Advance-Char}{current-char} +\usesstruct{Advance-Char}{line} +\begin{chunk}{defun Advance-Char} +(defun Advance-Char () + "Advances IN-STREAM, invoking Next Line if necessary." + (loop + (cond + ((not (Line-At-End-P Current-Line)) + (return (Line-Advance-Char Current-Line))) + ((next-line in-stream) + (return (current-char))) + ((return nil))))) + +\end{chunk} + \defun{storeblanks}{storeblanks} \begin{chunk}{defun storeblanks} (defun storeblanks (line n) @@ -5071,6 +5090,66 @@ of the symbol being parsed. The original list read: \end{chunk} +\defun{transIs}{transIs} +\calls{transIs}{isListConstructor} +\calls{transIs}{transIs1} +\begin{chunk}{defun transIs} +(defun |transIs| (u) + (if (|isListConstructor| u) + (cons '|construct| (|transIs1| u)) + u)) + +\end{chunk} + +\defun{transIs1}{transIs1} +\calls{transIs1}{qcar} +\calls{transIs1}{qcdr} +\calls{transIs1}{pairp} +\calls{transIs1}{nreverse0} +\calls{transIs1}{transIs} +\calls{transIs1}{transIs1} +\begin{chunk}{defun transIs1} +(defun |transIs1| (u) + (let (x h v tmp3) + (cond + ((and (pairp u) (eq (qcar u) '|construct|)) + (dolist (x (qcdr u) (nreverse0 tmp3)) + (push (|transIs| x) tmp3))) + ((and (pairp u) (eq (qcar u) '|append|) (pairp (qcdr u)) + (pairp (qcdr (qcdr u))) (eq (qcdr (qcdr (qcdr u))) nil)) + (setq x (qcar (qcdr u))) + (setq h (list '|:| (|transIs| x))) + (setq v (|transIs1| (qcar (qcdr (qcdr u))))) + (cond + ((and (pairp v) (eq (qcar v) '|:|) + (pairp (qcdr v)) (eq (qcdr (qcdr v)) nil)) + (list h (qcar (qcdr v)))) + ((eq v '|nil|) (car (cdr h))) + ((atom v) (list h (list '|:| v))) + (t (cons h v)))) + ((and (pairp u) (eq (qcar u) '|cons|) (pairp (qcdr u)) + (pairp (qcdr (qcdr u))) (eq (qcdr (qcdr (qcdr u))) nil)) + (setq h (|transIs| (qcar (qcdr u)))) + (setq v (|transIs1| (qcar (qcdr (qcdr u))))) + (cond + ((and (pairp v) (eq (qcar v) '|:|) (pairp (qcdr v)) + (eq (qcdr (qcdr v)) nil)) + (cons h (list (qcar (qcdr v))))) + ((eq v '|nil|) (cons h nil)) + ((atom v) (list h (list '|:| v))) + (t (cons h v)))) + (t u)))) + +\end{chunk} + +\defun{isListConstructor}{isListConstructor} +\calls{isListConstructor}{member} +\begin{chunk}{defun isListConstructor} +(defun |isListConstructor| (u) + (and (pairp u) (|member| (qcar u) '(|construct| |append| |cons|)))) + +\end{chunk} + \defplist{dollargreaterthan}{parseDollarGreaterthan} \begin{chunk}{postvars} @@ -11227,6 +11306,28 @@ if X matches initial segment of inputstream. \end{chunk} +\begin{chunk}{initvars} +(defvar Escape-Character #\\ "Superquoting character.") + +\end{chunk} + +\defun{token-lookahead-type}{token-lookahead-type} +\uses{token-lookahead-type}{Escape-Character} +\begin{chunk}{defun token-lookahead-type} +(defun token-lookahead-type (char) + "Predicts the kind of token to follow, based on the given initial character." + (declare (special Escape-Character)) + (cond + ((not char) 'eof) + ((or (char= char Escape-Character) (alpha-char-p char)) 'id) + ((digitp char) 'num) + ((char= char #\') 'string) + ((char= char #\[) 'bstring) + ((member char '(#\Space #\Tab #\Return) :test #'char=) 'white) + (t 'special-char))) + +\end{chunk} + \defun{match-advance-string}{match-advance-string} The match-string function returns length of X if X matches initial segment of inputstream. @@ -11713,6 +11814,85 @@ Stack of results of reduced productions. \chapter{Utility Functions} +\defun{translabel}{translabel} +\calls{translabel}{translabel1} +\begin{chunk}{defun translabel} +(defun translabel (x al) + (translabel1 x al) x) + +\end{chunk} + +\defun{translabel1}{translabel1} +\calls{translabel1}{refvecp} +\calls{translabel1}{maxindex} +\calls{translabel1}{translabel1} +\calls{translabel1}{lassoc} +\begin{chunk}{defun translabel1} +(defun translabel1 (x al) + "Transforms X according to AL = ((