|
|
1.1 root 1: ; FP interpreter/compiler
2: ; Copyright (c) 1982 Scott B. Baden
3: ; Berkeley, California
4: ;
5: ; Copyright (c) 1982 Regents of the University of California.
6: ; All rights reserved. The Berkeley software License Agreement
7: ; specifies the terms and conditions for redistribution.
8: ;
9: (setq SCCS-fpMacs.l "@(#)fpMacs.l 5.1 (Berkeley) 5/31/85")
10:
11: (declare
12: (macros t)
13: (special ptport infile))
14:
15:
16: (eval-when (compile eval load)
17:
18: (setq whiteSpace ''(9 10 32))
19: (setq blankOrTab ''(9 32))
20: (setq CR 10)
21: (setq BLANK 32)
22: (setq lAngle '|<|)
23: (setq rAngle '|>|)
24:
25: (setq funcForms
26: ''(alpha$fp
27: insert$fp
28: constant$fp
29: condit$fp
30: constr$fp
31: compos$fp
32: while$fp
33: ti$fp))
34:
35: (setq multiAdicFns
36: ''(select$fp
37: tl$fp
38: tlr$fp
39: id$fp
40: atom$fp
41: null$fp
42: reverse$fp
43: distl$fp
44: distr$fp
45: length$fp
46: apndl$fp
47: apndr$fp
48: rotl$fp
49: rotr$fp
50: trans$fp
51: first$fp
52: last$fp
53: front$fp
54: pick$fp
55: concat$fp
56: pair$fp
57: split$fp))
58:
59: (setq dyadFns
60: ''(plus$fp
61: sub$fp
62: times$fp
63: div$fp
64: and$fp
65: or$fp
66: xor$fp
67: not$fp
68: lt$fp
69: le$fp
70: eq$fp
71: ge$fp
72: gt$fp
73: ne$fp))
74:
75:
76: (setq libFns
77: ''(sin$fp
78: asin$fp
79: cos$fp
80: acos$fp
81: log$fp
82: exp$fp
83: mod$fp))
84:
85: (setq miscFns
86: ''(iota$fp))
87: )
88:
89:
90: (defmacro Tyi nil
91: `(let ((z (tyi)))
92: (cond ((and (null infile) ptport) (tyo z ptport))
93: (t z))))
94:
95: (defmacro peekc nil
96: `(tyipeek infile))
97:
98: (defmacro Getc nil
99: `(let ((piport infile))
100: (prog (c)
101: (cond ((eq 'eof$$ (setq c (readc piport 'eof$$)))
102: (*throw 'parse$err 'eof$$))
103: (t (setq c (car (exploden c)))
104: (cond
105: ((not (and (null in_buf) (memq c #.whiteSpace)))
106: (setq in_buf (cons c in_buf))))))
107: (cond ((and (null infile) ptport)
108: (cond
109: ((not (and (null in_buf) (memq c #.whiteSpace)))
110: (tyo c ptport)))))
111: (return c))))
112:
113: (defmacro Read nil
114: `(let ((z (read)))
115: (prog nil
116: (cond ((and (null infile) ptport (not (listp z))) (patom z ptport)))
117: (cond ((and (null infile) ptport (not (listp z)))
118: (do
119: ((c (tyipeek) (tyipeek)))
120: ((or (and (eq c #.CR) (Tyi) t)
121: (null (memq c #.blankOrTab))))
122: (Tyi))))
123:
124: (return z))))
125:
126: (defmacro find (flg lst)
127: `(cond ((atom ,lst) (eq ,flg ,lst))
128: ((not (listp ,lst)) nil)
129: (t (memq ,flg ,lst))))
130:
131:
132: ; we want top-level size, not total number of arguments
133:
134: (defmacro size (x)
135: `(cond ((atom ,x) 1)
136: (t (length ,x))))
137:
138: (defmacro twop (x)
139: `(eq 2 ,x))
140:
141:
142: ;; Special macros to help out tree insert
143:
144: (defmacro treeIns (fn input Len)
145: `(cond ((zerop ,Len) (unitTreeInsert ,fn))
146: ((onep ,Len) (car ,input))
147: ((twop ,Len) (funcall ,fn ,input))
148: (t (treeInsWithLen ,fn ,input ,Len))))
149:
150:
151: (defmacro unitTreeInsert (fn)
152: `(let ((ufn (get 'u-fnc ,fn)))
153: (cond (ufn (funcall ufn))
154: (t (bottom)))))
155:
156:
157: (putprop 'fpMacs t 'loaded)
158:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.