最后活跃于 1757375455

electricwah's Avatar electricwah 修订了这个 Gist 1757375455. 转到此修订

1 file changed, 1 insertion, 1 deletion

complete-generic-compiler.nv

@@ -376,7 +376,7 @@
376 376 |#===============#|
377 377 || '@include' lib/platforms/browser_dom.nv
378 378
379 - || :DOM: ( <query #code-actions <@after #out or textarea id = out value = [] rows = 5 )
379 + || :DOM: ( <query #code-actions <@after #out or textarea id = out value = [] rows = 20 cols = 80 )
380 380
381 381 | :: output :current dom element: $out? |
382 382 :@js: $out.value += (stacks['final out'].map(x=>x.join(' ')).toReversed().join('\n')+'\n'); delete stacks['final out'];

electricwah's Avatar electricwah 修订了这个 Gist 1757372570. 转到此修订

1 file changed, 1 insertion, 1 deletion

complete-generic-compiler.nv

@@ -376,7 +376,7 @@
376 376 |#===============#|
377 377 || '@include' lib/platforms/browser_dom.nv
378 378
379 - || :DOM: ( <query #code-actions <@after #out or textarea id = out value = [] )
379 + || :DOM: ( <query #code-actions <@after #out or textarea id = out value = [] rows = 5 )
380 380
381 381 | :: output :current dom element: $out? |
382 382 :@js: $out.value += (stacks['final out'].map(x=>x.join(' ')).toReversed().join('\n')+'\n'); delete stacks['final out'];

electricwah's Avatar electricwah 修订了这个 Gist 1757371435. 转到此修订

1 file changed, 409 insertions

complete-generic-compiler.nv(文件已创建)

@@ -0,0 +1,409 @@
1 + | :: get cause 1 |
2 + :stack: A
3 + :pattern: . a
4 + . b
5 + . variable c
6 + . d
7 + . variable e
8 + :index: ( 0 1 2 3 4 )
9 + | :: get cause 2 |
10 + :stack: A
11 + :pattern: . stride
12 + . test
13 + :index: ( 0 1 )
14 + | :: get cause 3 |
15 + :stack: B
16 + :pattern: . other
17 + . cause
18 + . match
19 + . variable c
20 + :index: ( 0 1 2 3 )
21 + | :: get effect 1 |
22 + :stack: out_A
23 + :items: . output
24 + . one
25 + . variable c
26 + :index: ( 0 1 2 )
27 + | :: get effect 2 |
28 + :stack: out_B
29 + :items: . output
30 + . 2
31 + . variable e
32 + :index: ( 0 1 2 )
33 +
34 + | :: get rule 1 |
35 + :causes: ( 1 2 3 )
36 + :effects: ( 1 2 )
37 +
38 + | :: get cause 4 |
39 + :stack: ohnoes
40 + :pattern: . a
41 + . second
42 + . rule
43 + :index: ( 0 1 2 )
44 + | :: get effect 3 |
45 + :stack: x
46 + :items: . what
47 + . shall
48 + . we
49 + . do
50 + :index: ( 0 1 2 3 )
51 +
52 + | :: get rule 2 |
53 + :causes: ( 4 )
54 + :effects: ( 3 )
55 +
56 + || :rules: ( 1 2 )
57 +
58 + |------------------------------|
59 + |- handle incrementing -|
60 + |------------------------------|
61 + | :@math: add 0 1 | :@math: 1
62 + | :@math: add 1 1 | :@math: 2
63 + | :@math: add 2 1 | :@math: 3
64 + | :@math: add 3 1 | :@math: 4
65 + | :@math: add 4 1 | :@math: 5
66 + | :@math: add 5 1 | :@math: 6
67 + | :@math: add 6 1 | :@math: 7
68 + | :@math: add 7 1 | :@math: 8
69 + | :@math: add 8 1 | :@math: 9
70 + | :@math: add 9 1 | :@math: 10
71 + | :@math: add 10 1 | :@math: 11
72 + | :@math: add 11 1 | :@math: 12
73 + | :@math: add 12 1 | :@math: 13
74 + | :@math: add 13 1 | :@math: 14
75 + | :@math: add 14 1 | :@math: 15
76 + | :@math: add 1 $x | :@math: add $x 1
77 + |------------------------------|
78 +
79 +
80 +
81 + | :: process rule :rules: $ruleid | :processed rule: $ruleid
82 + :: get rule $ruleid :current rule id: $ruleid
83 + :: process causes
84 + :: clear causes temp state
85 + :: check stack depths
86 + :: process effects
87 + :: clear rule temp state
88 +
89 + | :: clear rule temp state? :stack: $stack |
90 + | :: clear rule temp state? :vars: variable $x = index $y of stack $z at depth $q |
91 +
92 +
93 + | :: clear rule temp state |
94 +
95 +
96 + | :: process causes? :causes: $causeid |
97 + :: get cause $causeid :length: 0
98 + :: check stack
99 + :: process pattern
100 + :: check fact lengths
101 + :: pop cause
102 +
103 +
104 + | :: process causes |
105 +
106 +
107 + |:: check stack depths|
108 +
109 + | :: check fact lengths
110 + :stack: $stack?
111 + :current stride depth: $depth ?
112 + :length: $length |
113 + :check fact lengths: check stack $stack depth $depth has length $length
114 +
115 + | :: clear causes temp state :current stride depth: $n |
116 +
117 + | :: check stack :stack: $stack?
118 + | :: add stack $stack
119 +
120 + | :: pop cause
121 + :stack: $stack |
122 + :pop causes: pop $stack
123 +
124 + |------------------------------|
125 +
126 + | :: add stack $stack?
127 + :current stride depth: $n |
128 +
129 + | :: add stack $stack :@math: $depth |
130 + :current stride depth: $depth
131 + :strides: check stack $stack has at least depth $depth
132 + :: strides temp -> strides
133 +
134 + | :: add stack $stack? :strides: check stack $stack has at least depth $depth |
135 + :@math: add $depth 1
136 +
137 +
138 + | :: add stack $stack? :strides: check stack $different has at least depth $depth |
139 + :strides temp: check stack $different has at least depth $depth
140 +
141 + | :: add stack $stack |
142 + :current stride depth: 1
143 + :strides temp: check stack $stack has at least depth 1
144 + :: strides temp -> strides
145 +
146 + | :: strides temp -> strides?
147 + :strides temp: check stack $stack has at least depth $depth |
148 + :strides: check stack $stack has at least depth $depth
149 +
150 + | :: strides temp -> strides |
151 +
152 + |------------------------------|
153 +
154 + | :: increment length :length: $old :@math: $n | :length: $n
155 + | :: increment length? :length: $n? | :@math: add $n 1
156 +
157 +
158 + |
159 + :: process pattern?
160 + :stack: $stack?
161 + :pattern: variable $name
162 + :index: $i
163 + :current stride depth: $depth?
164 + |
165 + :: do variable $name at index $i of stack $stack at depth $depth
166 + :: increment length
167 +
168 + |- var is already declared -|
169 + | :: do variable $name at index $i of stack $stack at depth $depth
170 + :vars: variable $name = index $j of stack $stack2 at depth $depth2?
171 + |
172 + :check vars: check index $i of top of stack $stack at depth $depth equals value of var $name
173 + :: vars temp -> vars
174 +
175 + |# can also do this to give more information #|
176 + :check vars: check index $i of top of stack $stack at depth $depth equals
177 + var $name stack $stack2 depth $depth2 index $index2
178 +
179 + |- not the right var, check next -|
180 + | :: do variable $name at index $i of stack $stack at depth $depth?
181 + :vars: variable $different = index $j of stack $stack2 at depth $depth2
182 + |
183 + :vars temp: variable $different = index $j of stack $stack2 at depth $depth2
184 +
185 +
186 + |- variable isn't declared yet, so declare it -|
187 + | :: do variable $name at index $i of stack $stack at depth $depth |
188 + :set vars: declare variable $name = index $i of stack $stack at depth $depth
189 + :vars: variable $name = index $i of stack $stack at depth $depth
190 + :: vars temp -> vars
191 +
192 +
193 +
194 + | :: vars temp -> vars
195 + :vars temp: variable $name = index $i of stack $stack at depth $depth
196 + |
197 + :vars: variable $name = index $i of stack $stack at depth $depth
198 +
199 + | :: vars temp -> vars |
200 +
201 + |
202 + :: process pattern?
203 + :stack: $stack?
204 + :pattern: $symbol
205 + :index: $i
206 + :current stride depth: $depth?
207 + |
208 + :check facts: check stack $stack at depth $depth matches symbol $symbol at index $i
209 + :: increment length
210 +
211 + | :: process pattern |
212 +
213 + |--------------------|
214 +
215 +
216 + | :: process effects? :effects: $effectid |
217 + :: get effect $effectid
218 + :: push effects start
219 + :: process items
220 + :: push effects end
221 +
222 + | :: process effects |
223 +
224 + | :: push effects start | :push effects: start fact to push
225 + | :: push effects end | :push effects: end fact to push
226 +
227 +
228 + |
229 + :: process items?
230 + :stack: $stack?
231 + :items: $symbol
232 + :index: $i
233 + |
234 + :push effects: symbol $symbol
235 +
236 + |
237 + :: process items?
238 + :stack: $stack?
239 + :items: variable $name
240 + :index: $i
241 + |
242 + :push effects: variable $name
243 +
244 + | :: process items |
245 +
246 +
247 + | :emit: rule header $ruleid
248 + | :out: rule header $ruleid
249 +
250 + | :emit: check stack heights?
251 + :strides: check stack $stack has at least depth $depth
252 + | :out: check stack $stack has at least depth $depth
253 + | :emit: check stack heights |
254 +
255 + | :emit: check facts lengths?
256 + :check fact lengths: check stack $stack depth $depth has length $length
257 + | :out: check stack $stack depth $depth has length $length
258 + | :emit: check facts lengths |
259 +
260 + | :emit: check facts constant symbol matches?
261 + :check facts: check stack $stack at depth $depth matches symbol $symbol at index $index
262 + | :out: check stack $stack at depth $depth matches symbol $symbol at index $index
263 + | :emit: check facts constant symbol matches |
264 +
265 + | :emit: set variables?
266 + :set vars: declare variable $name = index $i of stack $stack at depth $depth
267 + | :out: declare variable $name = index $i of stack $stack at depth $depth
268 + | :emit: set variables |
269 +
270 + | :emit: check variables equality?
271 + :check vars: check index $i of top of stack $stack at depth $depth equals value of var $name
272 + | :out: check index $i of top of stack $stack at depth $depth equals value of var $name
273 + | :emit: check variables equality |
274 +
275 + | :emit: pop causes ?
276 + :pop causes: $a $b
277 + | :out: $a $b
278 +
279 + | :emit: pop causes |
280 +
281 + | :emit: push effects -> push effects reversed?
282 + :push effects: $a $b
283 + | :push effects reversed: $a $b
284 +
285 + | :emit: push effects -> push effects reversed?
286 + :push effects: $a $b $c $d
287 + | :push effects reversed: $a $b $c $d
288 + | :emit: push effects -> push effects reversed |
289 +
290 + | :emit: push effects reversed -> out?
291 + :push effects reversed: $a $b $c $d
292 + | :out: $a $b $c $d
293 +
294 + | :emit: push effects reversed -> out?
295 + :push effects reversed: $a $b
296 + | :out: $a $b
297 + | :emit: push effects reversed -> out |
298 +
299 + | :emit: push effects |
300 + :emit: push effects -> push effects reversed
301 + :emit: push effects reversed -> out
302 +
303 + | :emit: rule footer
304 + | :out: spacer :out: rule footer
305 +
306 + | :: emit rule
307 + :current rule id: $ruleid
308 + | :: emitting rule
309 + :emit:
310 + . rule header $ruleid
311 + . check stack heights
312 + . check facts lengths
313 + . check facts constant symbol matches
314 + . set variables
315 + . check variables equality
316 + . pop causes
317 + . push effects
318 + . rule footer
319 +
320 + | :: emitting rule |
321 +
322 + | :: emit step function |
323 + :emit:
324 + . step function header
325 + . try each rule
326 + . step function footer
327 +
328 + | :emit: step function header | :out: step function header
329 + | :emit: step function footer | :out: spacer :out: step function footer
330 +
331 + | :emit: try each rule? :rules: $ruleid |
332 + :out: try rule $ruleid
333 + | :emit: try each rule |
334 +
335 +
336 + |- :vim:sw=3:ts=3:et: -|
337 +
338 +
339 + | :: breakpoint | :@js: me.gas = 0;
340 +
341 + |://:| :: emit file header :: output
342 +
343 + ||
344 + :: output file header
345 + :: process, emit, and output rules
346 + :: processed rules -> rules
347 + :: output step function
348 + :: output file footer
349 +
350 + | :: output file header |
351 + :out: spacer
352 + :out: file header
353 + :: translate :: output
354 +
355 + | :: output file footer |
356 + :out: file footer
357 + :out: spacer
358 + :: translate :: output
359 +
360 + | :: output step function |
361 + :: emit step function
362 + :: translate
363 + :: output
364 +
365 + | :: processed rules -> rules? :processed rule: $r | :rules: $r
366 + | :: processed rules -> rules |
367 +
368 + | :: process, emit, and output rules ? :rules: $n?|
369 + :: process rule
370 + :: emit rule
371 + :: translate
372 + :: output
373 + | :: process, emit, and output rules |
374 +
375 +
376 + |#===============#|
377 + || '@include' lib/platforms/browser_dom.nv
378 +
379 + || :DOM: ( <query #code-actions <@after #out or textarea id = out value = [] )
380 +
381 + | :: output :current dom element: $out? |
382 + :@js: $out.value += (stacks['final out'].map(x=>x.join(' ')).toReversed().join('\n')+'\n'); delete stacks['final out'];
383 +
384 + |#===============#|
385 +
386 + | :: translate? :out: spacer |
387 + :final out: []
388 +
389 + | :: translate? :out: $a | :final out: $a
390 + | :: translate? :out: $a $b | :final out: $a $b
391 + | :: translate? :out: $a $b $c | :final out: $a $b $c
392 + | :: translate? :out: $a $b $c $d | :final out: $a $b $c $d
393 + | :: translate? :out: $a $b $c $d $e | :final out: $a $b $c $d $e
394 + | :: translate? :out: $a $b $c $d $e $f | :final out: $a $b $c $d $e $f
395 + | :: translate? :out: $a $b $c $d $e $f $g | :final out: $a $b $c $d $e $f $g
396 + | :: translate? :out: $a $b $c $d $e $f $g $h | :final out: $a $b $c $d $e $f $g $h
397 + | :: translate? :out: $a $b $c $d $e $f $g $h $i | :final out: $a $b $c $d $e $f $g $h $i
398 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j | :final out: $a $b $c $d $e $f $g $h $i $j
399 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k | :final out: $a $b $c $d $e $f $g $h $i $j $k
400 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l | :final out: $a $b $c $d $e $f $g $h $i $j $k $l
401 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l $m | :final out: $a $b $c $d $e $f $g $h $i $j $k $l $m
402 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n | :final out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n
403 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o | :final out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o
404 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p | :final out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p
405 + | :: translate? :out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q | :final out: $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q
406 + | :: translate |
407 +
408 +
409 + |#========#|
上一页 下一页