xref: /original-bsd/old/lisp/fp/fp.vax/parser.l (revision 92d3de31)
1 (setq SCCS-parser.l "@(#)parser.l	1.1	04/27/83")
2 ;  FP interpreter/compiler
3 ;  Copyright (c) 1982  Scott B. Baden
4 ;  Berkeley, California
5 
6 (include specials.l)
7 (declare (special flag)
8   (localf get_condit trap_err Push
9 	  prs_fn get_def get_constr get_while Pop))
10 
11 (defun parse (a_flag)
12   (let ((flag a_flag))
13        (do
14 	((tkn (get_tkn) (get_tkn))
15 	 (rslt nil) (action nil) (wslen 0) (stk nil))
16 
17 	((eq tkn 'eof$$) (cond ((eq flag 'top_lev) 'eof$$)
18 			       (t (*throw 'parse$err  '(err$$ eof)))))
19 
20 	(cond ((null (plist (prs_fn))) (*throw 'parse$err `(err$$ unknown ,tkn))))
21 	(cond ((find 'badtkn$$ tkn) (*throw 'parse$err `(err$$ badtkn ,(cadr tkn)))))
22 	(setq action (get (prs_fn) flag))
23 	(cond ((null action) (*throw 'parse$err `(err$$ illeg ,tkn))))
24 	(setq rslt (funcall action))
25 	(cond ((eq rslt 'cmd$$) (return rslt)))
26 	(cond ((not (listp rslt)) (*throw 'parse$err  `(err$$ fatal1 ,stk ,tkn ,rslt))))
27 	(cond ((eq (car rslt) 'return)
28 	       (return
29 		(cond ((eq (cadr rslt) 'done) (cdr rslt))
30 		      (t (cadr rslt)))))
31 
32 	      ((eq (car rslt) 'Push)
33 	       (cond ((eq flag 'while$$)
34 		      (cond ((or (zerop wslen) (onep wslen))
35 			     (Push (cadr rslt)))
36 			    ((twop wslen) (*throw 'parse$err  `(err$$ bad_whl ,stk ,tkn)))
37 			    (t (*throw  'parse$err '(err$$ bad_while parse)))))
38 		     (t
39 		      (cond ((null stk) (Push (cadr rslt)))
40 			    (t (*throw  'parse$err `(err$$ stk_ful ,stk ,tkn)))))))
41 
42 	      ((eq (car rslt) 'nothing))
43 	      (t (*throw  'parse$err `(err$$ fatal2 ,stk ,tkn ,rslt)))))))
44 
45 
46 ; These are the parse action functions.
47 ; There is one for each token-context combination.
48 ; The contexts  are:
49 ;     top_lev,constr$$,compos$$,alpha$$,insert$$.
50 ; The name of each function is formed by appending p$ to the
51 ; name of the token just parsed.
52 ; For each function name there is actually a set of functions
53 ; associated by a plist (keyed on the context).
54 
55 (defun (p$lbrace$$ top_lev) nil
56   (cond (in_def  (*throw  'parse$err '(err$$ ill_lbrace)))
57 	(t (list 'nothing (get_def)))))
58 
59 (defun (p$rbrace$$ top_lev) nil
60   (cond ((not in_def)  (*throw 'parse$err  '(err$$ ill_rbrace)))
61 	(t (progn
62 	    (cond ((null stk) (*throw  'parse$err '(err$$ stk_emp)))
63 		  ((null infile)
64 		   (do
65 		    ((c (Tyi) (Tyi)))
66 		    ((eq c 10)))))
67 	    `(return ,(Pop))))))
68 
69 (defun (p$rbrace$$ semi$$) nil
70   (cond
71    ((not in_def)  (*throw  'parse$err '(err$$ ill_rbrace)))
72    (t (progn
73        (cond ((null stk) (*throw  'parse$err '(err$$ stk_emp)))
74 	     ((null infile)
75 	      (do
76 	       ((c (Tyi) (Tyi)))
77 	       ((eq c 10)))))
78        `(rbrace$$ ,(Pop))))))
79 
80 (defun trap_err (p)
81   (cond ((find 'err$$ p) (*throw  'parse$err p))
82 	(t p)))
83 
84 (defun (p$lparen$$ top_lev) nil
85   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
86 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit)  (parse tkn)))))))
87 
88 (defun (p$lparen$$ constr$$) nil
89   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
90 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
91 
92 (defun (p$lparen$$ compos$$) nil
93   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
94 	(t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
95 
96 (defun (p$lparen$$ alpha$$) nil
97   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
98 	(t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
99 
100 (defun (p$lparen$$ ti$$) nil
101   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
102 	(t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
103 
104 (defun (p$lparen$$ insert$$) nil
105   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
106 	(t `(return ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
107 
108 (defun (p$lparen$$ arrow$$) nil
109   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
110 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
111 
112 (defun (p$lparen$$ semi$$) nil
113   (cond ((not (null stk)) (*throw  'parse$err '(err$$ ill_lpar)))
114 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
115 
116 (defun (p$lparen$$ lparen$$) nil
117   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_lpar)))
118 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
119 
120 (defun (p$lparen$$ while$$) nil
121   (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_lpar)))
122 	(t `(Push ,(trap_err (*catch '(parse$err end_while end_condit) (parse tkn)))))))
123 
124 (defun (p$rparen$$ lparen$$) nil
125   `(return ,(Pop)))
126 
127 (defun (p$rparen$$ top_lev) nil			; process commands
128   (cond ((not (null stk)) (*throw 'parse$err '(err$$ unbalparen)))
129 	(t (cond ((null infile) (get_cmd))
130 		 (t (patom "commands may not be issued from a file")
131 		    (terpri)
132 		    'cmd$$)))))
133 
134 (defun (p$rparen$$ semi$$) nil
135   `(return ,(Pop)))
136 
137 (defun (p$rparen$$ while$$) nil
138   `(return ,(nreverse (list (Pop) (Pop)))))
139 
140 (defun (p$alpha$$ top_lev) nil
141   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
142 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
143 
144 (defun (p$alpha$$ compos$$) nil
145   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
146 	(t `(return ,(frm_hnk 'alpha$$ (parse tkn))))))
147 
148 (defun (p$alpha$$ constr$$) nil
149   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
150 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
151 
152 (defun (p$alpha$$ insert$$) nil
153   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
154 	(t `(return ,(frm_hnk 'alpha$$ (parse tkn))))))
155 
156 (defun (p$alpha$$ ti$$) nil
157   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
158 	(t `(return ,(frm_hnk 'alpha$$ (parse tkn))))))
159 
160 (defun (p$alpha$$ alpha$$) nil
161   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
162 	(t `(return ,(frm_hnk 'alpha$$ (parse tkn))))))
163 
164 (defun (p$alpha$$ lparen$$) nil
165   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
166 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
167 
168 (defun (p$alpha$$ arrow$$) nil
169   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
170 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
171 
172 (defun (p$alpha$$ semi$$) nil
173   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_alpha)))
174 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
175 
176 (defun (p$alpha$$ while$$) nil
177   (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_alpha)))
178 	(t `(Push ,(frm_hnk 'alpha$$ (parse tkn))))))
179 
180 
181 (defun (p$insert$$ top_lev) nil
182   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
183 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
184 
185 (defun (p$insert$$ compos$$) nil
186   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
187 	(t `(return ,(frm_hnk 'insert$$ (parse tkn))))))
188 
189 (defun (p$insert$$ constr$$) nil
190   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
191 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
192 
193 (defun (p$insert$$ insert$$) nil
194   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
195 	(t `(return ,(frm_hnk 'insert$$ (parse tkn))))))
196 
197 (defun (p$insert$$ ti$$) nil
198   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
199 	(t `(return ,(frm_hnk 'insert$$ (parse tkn))))))
200 
201 (defun (p$insert$$ alpha$$) nil
202   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
203 	(t `(return ,(frm_hnk 'insert$$ (parse tkn))))))
204 
205 (defun (p$insert$$ lparen$$) nil
206   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
207 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
208 
209 (defun (p$insert$$ arrow$$) nil
210   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
211 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
212 
213 (defun (p$insert$$ semi$$) nil
214   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_insert)))
215 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
216 
217 (defun (p$insert$$ while$$) nil
218   (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_insert)))
219 	(t `(Push ,(frm_hnk 'insert$$ (parse tkn))))))
220 
221 
222 (defun (p$ti$$ top_lev) nil
223   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
224 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
225 
226 (defun (p$ti$$ compos$$) nil
227   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
228 	(t `(return ,(frm_hnk 'ti$$ (parse tkn))))))
229 
230 (defun (p$ti$$ constr$$) nil
231   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
232 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
233 
234 (defun (p$ti$$ insert$$) nil
235   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
236 	(t `(return ,(frm_hnk 'ti$$ (parse tkn))))))
237 
238 (defun (p$ti$$ ti$$) nil
239   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
240 	(t `(return ,(frm_hnk 'ti$$ (parse tkn))))))
241 
242 (defun (p$ti$$ alpha$$) nil
243   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
244 	(t `(return ,(frm_hnk 'ti$$ (parse tkn))))))
245 
246 (defun (p$ti$$ lparen$$) nil
247   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
248 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
249 
250 (defun (p$ti$$ arrow$$) nil
251   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
252 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
253 
254 (defun (p$ti$$ semi$$) nil
255   (cond ((not (null stk)) (*throw 'parse$err '(err$$ ill_ai)))
256 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
257 
258 (defun (p$ti$$ while$$) nil
259   (cond ((twop wslen) (*throw 'parse$err '(err$$ ill_ai)))
260 	(t `(Push ,(frm_hnk 'ti$$ (parse tkn))))))
261 
262 
263 (defun (p$compos$$ top_lev) nil
264   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
265 
266 (defun (p$compos$$ compos$$) nil
267   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
268 
269 (defun (p$compos$$ constr$$) nil
270   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
271 
272 (defun (p$compos$$ lparen$$) nil
273   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
274 
275 (defun (p$compos$$ arrow$$) nil
276   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
277 
278 (defun (p$compos$$ semi$$) nil
279   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
280 
281 (defun (p$compos$$ while$$) nil
282   `(Push ,(frm_hnk 'compos$$ (Pop) (parse tkn))))
283 
284 
285 (defun (p$comma$$ constr$$) nil
286   `(return ,(Pop)))
287 
288 (defun (p$comma$$ semi$$) nil
289   `(comma$$ ,(Pop)))
290 
291 
292 (defun (p$lbrack$$ top_lev) nil
293   `(Push ,(get_constr)))
294 
295 (defun (p$lbrack$$ compos$$) nil
296   `(return ,(get_constr)))
297 
298 (defun (p$lbrack$$ constr$$) nil
299   `(Push ,(get_constr)))
300 
301 (defun (p$lbrack$$ lparen$$) nil
302   `(Push ,(get_constr)))
303 
304 (defun (p$lbrack$$ arrow$$) nil
305   `(Push ,(get_constr)))
306 
307 (defun (p$lbrack$$ semi$$) nil
308   `(Push ,(get_constr)))
309 
310 (defun (p$lbrack$$ alpha$$) nil
311   `(return ,(get_constr)))
312 
313 (defun (p$lbrack$$ insert$$) nil
314   `(return ,(get_constr)))
315 
316 (defun (p$lbrack$$ ti$$) nil
317   `(return ,(get_constr)))
318 
319 (defun (p$lbrack$$ while$$) nil
320   `(Push ,(get_constr)))
321 
322 
323 (defun (p$rbrack$$ constr$$) nil
324   `(return done ,(cond ((null stk) nil)
325 		       (t (Pop)))))
326 
327 (defun (p$rbrack$$ semi$$) nil
328   `(rbrack$$ ,`(done ,(cond ((null stk) nil)
329 			    (t (Pop))))))
330 
331 
332 (defun (p$defined$$ top_lev) nil
333   `(Push ,(concat (cadr tkn) '_fp)))
334 
335 (defun (p$defined$$ compos$$) nil
336   `(return ,(concat (cadr tkn) '_fp)))
337 
338 (defun (p$defined$$ constr$$) nil
339   `(Push ,(concat (cadr tkn) '_fp)))
340 
341 (defun (p$defined$$ lparen$$) nil
342   `(Push ,(concat (cadr tkn) '_fp)))
343 
344 (defun (p$defined$$ arrow$$) nil
345   `(Push ,(concat (cadr tkn) '_fp)))
346 
347 (defun (p$defined$$ semi$$) nil
348   `(Push ,(concat (cadr tkn) '_fp)))
349 
350 (defun (p$defined$$ alpha$$) nil
351   `(return ,(concat (cadr tkn) '_fp)))
352 
353 (defun (p$defined$$ insert$$) nil
354   `(return ,(concat (cadr tkn) '_fp)))
355 
356 (defun (p$defined$$ ti$$) nil
357   `(return ,(concat (cadr tkn) '_fp)))
358 
359 (defun (p$defined$$ while$$) nil
360   `(Push ,(concat (cadr tkn) '_fp)))
361 
362 
363 (defun (p$builtin$$ top_lev) nil
364   `(Push ,(concat (cadr tkn) '$fp)))
365 
366 (defun (p$builtin$$ compos$$) nil
367   `(return ,(concat (cadr tkn) '$fp)))
368 
369 (defun (p$builtin$$ constr$$) nil
370   `(Push ,(concat (cadr tkn) '$fp)))
371 
372 (defun (p$builtin$$ lparen$$) nil
373   `(Push ,(concat (cadr tkn) '$fp)))
374 
375 (defun (p$builtin$$ arrow$$) nil
376   `(Push ,(concat (cadr tkn) '$fp)))
377 
378 (defun (p$builtin$$ semi$$) nil
379   `(Push ,(concat (cadr tkn) '$fp)))
380 
381 (defun (p$builtin$$ alpha$$) nil
382   `(return ,(concat (cadr tkn) '$fp)))
383 
384 (defun (p$builtin$$ insert$$) nil
385   `(return ,(concat (cadr tkn) '$fp)))
386 
387 (defun (p$builtin$$ ti$$) nil
388   `(return ,(concat (cadr tkn) '$fp)))
389 
390 (defun (p$builtin$$ while$$) nil
391   `(Push ,(concat (cadr tkn) '$fp)))
392 
393 
394 (defun (p$select$$ top_lev) nil
395   `(Push ,(makhunk tkn)))
396 
397 (defun (p$select$$ compos$$) nil
398   `(return ,(makhunk tkn)))
399 
400 (defun (p$select$$ constr$$) nil
401   `(Push ,(makhunk tkn)))
402 
403 (defun (p$select$$ lparen$$) nil
404   `(Push ,(makhunk tkn)))
405 
406 (defun (p$select$$ arrow$$) nil
407   `(Push ,(makhunk tkn)))
408 
409 (defun (p$select$$ semi$$) nil
410   `(Push ,(makhunk tkn)))
411 
412 (defun (p$select$$ alpha$$) nil
413   `(return ,(makhunk tkn)))
414 
415 (defun (p$select$$ while$$) nil
416   `(Push ,(makhunk tkn)))
417 
418 
419 (defun (p$constant$$ top_lev) nil
420   `(Push ,(makhunk tkn)))
421 
422 (defun (p$constant$$ compos$$) nil
423   `(return ,(makhunk tkn)))
424 
425 (defun (p$constant$$ constr$$) nil
426   `(Push ,(makhunk tkn)))
427 
428 (defun (p$constant$$ lparen$$) nil
429   `(Push ,(makhunk tkn)))
430 
431 (defun (p$constant$$ arrow$$) nil
432   `(Push ,(makhunk tkn)))
433 
434 (defun (p$constant$$ semi$$) nil
435   `(Push ,(makhunk tkn)))
436 
437 (defun (p$constant$$ alpha$$) nil
438   `(return ,(makhunk tkn)))
439 
440 (defun (p$constant$$ while$$) nil
441   `(Push ,(makhunk tkn)))
442 
443 
444 (defun (p$colon$$ top_lev) nil
445   (cond (in_def  (*throw 'parse$err '(err$$ ill_appl)))
446 	(t `(return ,(Pop)))))
447 
448 (defun (p$colon$$ semi$$) nil
449   (cond (in_def  (*throw 'parse$err '(err$$ ill_appl)))
450 	(t `(colon$$ ,(Pop)))))
451 
452 
453 (defun (p$arrow$$ lparen$$) nil
454   (get_condit))
455 
456 
457 (defun (p$semi$$ arrow$$) nil
458   `(return ,(Pop)))
459 
460 (defun (p$while$$ lparen$$) nil
461   (cond ((not (null stk)) (*throw 'parse$err '(err$$ bad_while)))
462 	(t (get_while))))
463 
464 
465 ; parse action support functions
466 
467 (defun get_condit nil
468   (prog (q r)
469 	(setq q (parse 'arrow$$))
470 	(cond ((and (listp q) (find 'err$$ q)) (*throw 'parse$err q)))
471 	(setq r (parse 'semi$$))
472 	(cond ((and (listp r) (find 'err$$ r)) (*throw 'parse$err r)))
473 	(*throw 'end_condit (frm_hnk 'condit$$ (Pop) q r))))
474 
475 
476 (defun Push (value)
477   (cond ((eq flag 'while$$)
478 	 (cond
479 	  ((zerop wslen) (setq stk value) (setq wslen 1))
480 	  ((onep wslen) (setq stk (list stk value)) (setq wslen 2))
481 	  (t (*throw 'parse$err '(err$$ bad_while Push)))))
482 	(t (setq stk value))))
483 
484 (defun Pop nil
485   (cond
486    ((null stk) (*throw 'parse$err '(err$$ stk_emp)))
487    (t
488     (prog (tmp)
489 	  (setq tmp stk)
490 	  (cond ((eq flag 'while$$)
491 		 (cond ((onep wslen) (setq stk nil) (setq wslen 0) (return tmp))
492 		       ((twop wslen)
493 			(setq stk (car tmp)) (setq wslen 1) (return (cadr tmp)))
494 		       (t  (*throw 'parse$err '(err$$ bad_while Pop)))))
495 		(t (setq stk nil)
496 		   (return tmp)))))))
497 
498 (defun get_def nil
499   (prog (dummy)
500 	(setq in_def t)
501 	(setq dummy (get_tkn))
502 	(cond ((find 'builtin$$ dummy) (*throw 'parse$err '(err$$ redef)))
503 	      ((not (find 'defined$$ dummy)) (*throw 'parse$err  '(err$$ bad_nam)))
504 	      (t (setq fn_name (concat (cadr dummy) '_fp))))))
505 
506 
507 (defun get_constr  nil
508   (cond ((eq flag 'while$$) (cond
509 			     ((twop wslen) (*throw 'parse$err `(err$$ bad_whl ,stk ,tkn)))))
510 	(t (cond ((not (null stk)) (*throw 'parse$err '(err$$ bad_constr parse))))))
511   (do
512    ((v (parse 'constr$$) (parse 'constr$$))
513     (temp nil)
514     (fn_lst nil))
515 
516    ((eq tkn 'eof$$) (*throw 'parse$err '(err$$ eof$$)))
517 
518    (cond
519     ((listp v)
520      (cond ((eq (car v) 'err$$) (*throw 'parse$err v))
521 	   ((eq (car v) 'done)
522 	    (cond ((eq (cadr v) 'err$$) (*throw 'parse$err  (cdr v)))
523 		  (t (return
524 		      (makhunk (cons 'constr$$ (reverse (cons (cadr v) fn_lst))))))))
525 	   (t (setq fn_lst (cons v fn_lst)))))
526     (t (setq fn_lst (cons v fn_lst))))))
527 
528 (def frm_hnk (lexpr (z)
529 		    (prog (l bad_one)
530 			  (setq l (listify z))
531 			  (setq bad_one (assq 'err$$ (cdr l)))
532 			  (cond ((null bad_one) (return (makhunk l)))
533 				(t (*throw 'parse$err bad_one))))))
534 
535 
536 
537 (defun prs_fn nil
538   (concat 'p$ (cond ((atom tkn) tkn)
539 		    (t (car tkn)))))
540 
541 (defun get_while nil
542   (let ((r (parse 'while$$)))
543        (cond ((and (listp r) (find 'err$$ r)) (*throw 'parse$err  r))
544 	     (t (*throw 'end_while (frm_hnk 'while$$ (car r) (cadr r)))))))
545 
546 (defun twop (x)
547   (eq 2 x))
548 
549