Simpler and more successful local collection (and `using`).
Cat's Eye Technologies
11 years ago
88 | 88 | return production(N, DBs). |
89 | 89 | analyze(CM, prodbranch(Fs, Ls, E)) = |
90 | 90 | analyze(CM, E) → DE & |
91 | locals(E) → Ls & reverse(Ls, nil) → Ls & | |
91 | locals(DE, nil) → Ls & | |
92 | reverse(Ls, nil) → Ls & | |
92 | 93 | return prodbranch(Fs, Ls, DE). |
93 | analyze(CM, call(prodref(MN, PN), As)) = | |
94 | $:equal(MN, '') & return call(prodref(CM, PN), As) | |
95 | | return call(prodref(MN, PN), As). | |
94 | analyze(CM, call(PR, As)) = | |
95 | analyze(CM, PR) → DPR & | |
96 | analyze_all(CM, As) → DAs & | |
97 | return call(DPR, DAs). | |
98 | analyze(CM, prodref(MN, PN)) = | |
99 | $:equal(MN, '') & return prodref(CM, PN) | |
100 | | return prodref(MN, PN). | |
96 | 101 | analyze(CM, or(L, R)) = |
97 | 102 | analyze(CM, L) → DL & |
98 | 103 | analyze(CM, R) → DR & |
111 | 116 | analyze(CM, L) → DL & |
112 | 117 | analyze(CM, R) → DR & |
113 | 118 | return concat(DL, DR). |
114 | analyze(CM, using(R, P)) = | |
119 | analyze(CM, using(R, PR)) = | |
115 | 120 | analyze(CM, R) → DR & |
116 | return using(DR, P). | |
121 | analyze(CM, PR) → DPR & | |
122 | return using(DR, DPR). | |
117 | 123 | analyze(CM, send(R, V)) = |
118 | 124 | analyze(CM, R) → DR & |
119 | 125 | return send(DR, V). |
127 | 133 | ##### |
128 | 134 | # returns a list of locals |
129 | 135 | |
130 | locals(call(PR, As)) = | |
131 | return nil. | |
132 | locals(or(L, R)) = | |
133 | locals(L) → LL & | |
134 | locals(R) → LR & | |
135 | union(LL, LR). | |
136 | locals(and(L, R)) = | |
137 | locals(L) → LL & | |
138 | locals(R) → LR & | |
139 | union(LL, LR). | |
140 | locals(not(X)) = | |
141 | locals(X). | |
142 | locals(while(X)) = | |
143 | locals(X). | |
144 | locals(concat(L, R)) = | |
145 | locals(L) → LL & | |
146 | locals(R) → LR & | |
147 | union(LL, LR). | |
148 | locals(using(R, P)) = | |
149 | locals(R). | |
150 | locals(send(R, V)) = | |
151 | locals(R) → LR & | |
152 | locals(V) → LV & | |
153 | union(LR, LV). | |
154 | locals(set(V, T)) = | |
155 | locals(V) → LV & | |
156 | locals(T) → LT & | |
157 | union(LV, LT). | |
158 | locals(atom(T)) = | |
159 | return nil. | |
160 | locals(constructor(T, Ts)) = | |
161 | locals_all(Ts). | |
162 | locals(variable(N)) = | |
163 | return list(N, nil). | |
136 | locals(call(PR, As), Ls) = | |
137 | Ls. | |
138 | locals(or(L, R), Ls) = | |
139 | locals(L, Ls) → Ls & | |
140 | locals(R, Ls). | |
141 | locals(and(L, R), Ls) = | |
142 | locals(L, Ls) → Ls & | |
143 | locals(R, Ls). | |
144 | locals(not(X), Ls) = | |
145 | locals(X, Ls). | |
146 | locals(while(X), Ls) = | |
147 | locals(X, Ls). | |
148 | locals(concat(L, R), Ls) = | |
149 | locals(L, Ls) → Ls & | |
150 | locals(R, Ls). | |
151 | locals(using(R, P), Ls) = | |
152 | locals(R, Ls). | |
153 | locals(send(R, V), Ls) = | |
154 | locals(V, Ls) → Ls & | |
155 | locals(R, Ls). | |
156 | locals(set(V, T), Ls) = | |
157 | locals(V, Ls) → Ls & | |
158 | locals(T, Ls). | |
159 | locals(atom(T), Ls) = Ls. | |
160 | locals(constructor(T, Ts), Ls) = | |
161 | locals_all(Ts, Ls). | |
162 | locals(variable(N), Ls) = | |
163 | add_elem(N, Ls). | |
164 | 164 | |
165 | locals_all(nil) = nil. | |
166 | locals_all(list(H,T)) = | |
167 | locals(H) → LH & | |
168 | locals_all(T) → LT & | |
169 | union(LH, LT). | |
170 | ||
171 | nil = 'nil'. | |
165 | locals_all(nil, Ls) = Ls. | |
166 | locals_all(list(H,T), Ls) = | |
167 | locals(H, Ls) → Ls & | |
168 | locals_all(T, Ls). | |
172 | 169 | |
173 | 170 | member(X, nil) = fail 'not a member'. |
174 | 171 | member(X, list(H,T)) = |
177 | 174 | add_elem(X, L) = |
178 | 175 | member(X, L) & L | return list(X, L). |
179 | 176 | |
180 | union(nil, L2) = L2. | |
181 | union(list(H,T), L2) = | |
182 | add_elem(H, L2) → L2 & | |
183 | union(T, L2). | |
184 | ||
185 | union(Other, L2) = add_elem(Other, L2). | |
177 | # union(nil, L2) = L2. | |
178 | # union(list(H,T), L2) = | |
179 | # add_elem(H, L2) → L2 & | |
180 | # union(T, L2). | |
181 | # | |
182 | # union(Other, L2) = add_elem(Other, L2). | |
186 | 183 | |
187 | 184 | } |