Compiler/Sample programs: Difference between revisions
< Compiler
Content added Content deleted
(Created page with "; Compute the GCD of two numbers {| class="wikitable" |- ! Input to lex ! Output from lex, input to parse ! Output from parse, input to gen ! Output from gen, input to VM |- |...") |
(Added additional samples) |
||
Line 1:
<hr>
__TOC__
=={{header|Compute the GCD of two numbers}}==
{| class="wikitable"
|-
Line 129 ⟶ 132:
</pre></b>
|}
=={{header|Factorial}}==
{| class="wikitable"
|-
! Input to lex
! Output from lex, input to parse
! Output from parse
! Output from gen, input to VM
|-
| style="vertical-align:top" |
<lang c>
/* 12 factorial is 479001600 */
n = 12;
result = 1;
i = 1;
while (i <= n) {
result = result * i;
i = i + 1;
}
print(result);
</lang>
| style="vertical-align:top" |
<b><pre>
3 1 Identifier n
3 3 Op_assign
3 5 Integer 12
3 7 Semicolon
4 1 Identifier result
4 8 Op_assign
4 10 Integer 1
4 11 Semicolon
5 1 Identifier i
5 3 Op_assign
5 5 Integer 1
5 6 Semicolon
6 1 Keyword_while
6 7 LeftParen
6 8 Identifier i
6 10 Op_lessequal
6 13 Identifier n
6 14 RightParen
6 16 LeftBrace
7 5 Identifier result
7 12 Op_assign
7 14 Identifier result
7 21 Op_multiply
7 23 Identifier i
7 24 Semicolon
8 5 Identifier i
8 7 Op_assign
8 9 Identifier i
8 11 Op_add
8 13 Integer 1
8 14 Semicolon
9 1 RightBrace
10 1 Keyword_print
10 6 LeftParen
10 7 Identifier result
10 13 RightParen
10 14 Semicolon
11 1 End_of_input
</pre></b>
| style="vertical-align:top" |
<b><pre>
Sequence
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier n
Integer 12
Assign
Identifier result
Integer 1
Assign
Identifier i
Integer 1
While
LessEqual
Identifier i
Identifier n
Sequence
Sequence
;
Assign
Identifier result
Multiply
Identifier result
Identifier i
Assign
Identifier i
Add
Identifier i
Integer 1
Sequence
;
Prti
Identifier result
;
</pre></b>
| style="vertical-align:top" |
<b><pre>
Datasize: 3 Strings: 0
0 push 12
5 store [0]
10 push 1
15 store [1]
20 push 1
25 store [2]
30 fetch [2]
35 fetch [0]
40 le
41 jz (41) 83
46 fetch [1]
51 fetch [2]
56 mul
57 store [1]
62 fetch [2]
67 push 1
72 add
73 store [2]
78 jmp (-49) 30
83 fetch [1]
88 prti
89 halt
</pre></b>
|}
=={{header|Fibonacci}}==
{| class="wikitable"
|-
! Input to lex
! Output from lex, input to parse
! Output from parse
! Output from gen, input to VM
|-
| style="vertical-align:top" |
<lang c>
/* fibonacci of 44 is 701408733 */
n = 44;
i = 1;
a = 0;
b = 1;
while (i < n) {
w = a + b;
a = b;
b = w;
i = i + 1;
}
print(w, "\n");
</lang>
| style="vertical-align:top" |
<b><pre>
3 1 Identifier n
3 3 Op_assign
3 5 Integer 44
3 7 Semicolon
4 1 Identifier i
4 3 Op_assign
4 5 Integer 1
4 6 Semicolon
5 1 Identifier a
5 3 Op_assign
5 5 Integer 0
5 6 Semicolon
6 1 Identifier b
6 3 Op_assign
6 5 Integer 1
6 6 Semicolon
7 1 Keyword_while
7 7 LeftParen
7 8 Identifier i
7 10 Op_less
7 12 Identifier n
7 13 RightParen
7 15 LeftBrace
8 5 Identifier w
8 7 Op_assign
8 9 Identifier a
8 11 Op_add
8 13 Identifier b
8 14 Semicolon
9 5 Identifier a
9 7 Op_assign
9 9 Identifier b
9 10 Semicolon
10 5 Identifier b
10 7 Op_assign
10 9 Identifier w
10 10 Semicolon
11 5 Identifier i
11 7 Op_assign
11 9 Identifier i
11 11 Op_add
11 13 Integer 1
11 14 Semicolon
12 1 RightBrace
13 1 Keyword_print
13 6 LeftParen
13 7 Identifier w
13 8 Comma
13 10 String "\n"
13 14 RightParen
13 15 Semicolon
15 1 End_of_input
</pre></b>
| style="vertical-align:top" |
<b><pre>
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier n
Integer 44
Assign
Identifier i
Integer 1
Assign
Identifier a
Integer 0
Assign
Identifier b
Integer 1
While
Less
Identifier i
Identifier n
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier w
Add
Identifier a
Identifier b
Assign
Identifier a
Identifier b
Assign
Identifier b
Identifier w
Assign
Identifier i
Add
Identifier i
Integer 1
Sequence
Sequence
;
Prti
Identifier w
;
Prts
String "\n"
;
</pre></b>
| style="vertical-align:top" |
<b><pre>
Datasize: 5 Strings: 1
"\n"
0 push 44
5 store [0]
10 push 1
15 store [1]
20 push 0
25 store [2]
30 push 1
35 store [3]
40 fetch [1]
45 fetch [0]
50 lt
51 jz (61) 113
56 fetch [2]
61 fetch [3]
66 add
67 store [4]
72 fetch [3]
77 store [2]
82 fetch [4]
87 store [3]
92 fetch [1]
97 push 1
102 add
103 store [1]
108 jmp (-69) 40
113 fetch [4]
118 prti
119 push 0
124 prts
125 halt
</pre></b>
|}
=={{header|FizzBuzz}}==
{| class="wikitable"
|-
! Input to lex
! Output from lex, input to parse
! Output from parse
! Output from gen, input to VM
|-
| style="vertical-align:top" |
<lang c>
/* FizzBuzz */
i = 1;
while (i <= 100) {
if (!(i % 15))
print("FizzBuzz");
else if (!(i % 3))
print("Fizz");
else if (!(i % 5))
print("Buzz");
else
print(i);
print("\n");
i = i + 1;
}
</lang>
| style="vertical-align:top" |
<b><pre>
2 1 Identifier i
2 3 Op_assign
2 5 Integer 1
2 6 Semicolon
3 1 Keyword_while
3 7 LeftParen
3 8 Identifier i
3 10 Op_lessequal
3 13 Integer 100
3 16 RightParen
3 18 LeftBrace
4 5 Keyword_if
4 8 LeftParen
4 9 Op_not
4 10 LeftParen
4 11 Identifier i
4 13 Op_mod
4 15 Integer 15
4 17 RightParen
4 18 RightParen
5 9 Keyword_print
5 14 LeftParen
5 15 String "FizzBuzz"
5 25 RightParen
5 26 Semicolon
6 5 Keyword_else
6 10 Keyword_if
6 13 LeftParen
6 14 Op_not
6 15 LeftParen
6 16 Identifier i
6 18 Op_mod
6 20 Integer 3
6 21 RightParen
6 22 RightParen
7 9 Keyword_print
7 14 LeftParen
7 15 String "Fizz"
7 21 RightParen
7 22 Semicolon
8 5 Keyword_else
8 10 Keyword_if
8 13 LeftParen
8 14 Op_not
8 15 LeftParen
8 16 Identifier i
8 18 Op_mod
8 20 Integer 5
8 21 RightParen
8 22 RightParen
9 9 Keyword_print
9 14 LeftParen
9 15 String "Buzz"
9 21 RightParen
9 22 Semicolon
10 5 Keyword_else
11 9 Keyword_print
11 14 LeftParen
11 15 Identifier i
11 16 RightParen
11 17 Semicolon
13 5 Keyword_print
13 10 LeftParen
13 11 String "\n"
13 15 RightParen
13 16 Semicolon
14 5 Identifier i
14 7 Op_assign
14 9 Identifier i
14 11 Op_add
14 13 Integer 1
14 14 Semicolon
15 1 RightBrace
16 1 End_of_input
</pre></b>
| style="vertical-align:top" |
<b><pre>
Sequence
Sequence
;
Assign
Identifier i
Integer 1
While
LessEqual
Identifier i
Integer 100
Sequence
Sequence
Sequence
;
If
Not
Mod
Identifier i
Integer 15
;
If
Sequence
;
Prts
String "FizzBuzz"
;
If
Not
Mod
Identifier i
Integer 3
;
If
Sequence
;
Prts
String "Fizz"
;
If
Not
Mod
Identifier i
Integer 5
;
If
Sequence
;
Prts
String "Buzz"
;
Sequence
;
Prti
Identifier i
;
Sequence
;
Prts
String "\n"
;
Assign
Identifier i
Add
Identifier i
Integer 1
</pre></b>
| style="vertical-align:top" |
<b><pre>
Datasize: 1 Strings: 4
"FizzBuzz"
"Fizz"
"Buzz"
"\n"
0 push 1
5 store [0]
10 fetch [0]
15 push 100
20 le
21 jz (121) 143
26 fetch [0]
31 push 15
36 mod
37 not
38 jz (15) 54
43 push 0
48 prts
49 jmp (66) 116
54 fetch [0]
59 push 3
64 mod
65 not
66 jz (15) 82
71 push 1
76 prts
77 jmp (38) 116
82 fetch [0]
87 push 5
92 mod
93 not
94 jz (15) 110
99 push 2
104 prts
105 jmp (10) 116
110 fetch [0]
115 prti
116 push 3
121 prts
122 fetch [0]
127 push 1
132 add
133 store [0]
138 jmp (-129) 10
143 halt
</pre></b>
|}
=={{header|99 Bottles}}==
{| class="wikitable"
|-
! Input to lex
! Output from lex, input to parse
! Output from parse
! Output from gen, input to VM
|-
| style="vertical-align:top" |
<lang c>
/* 99 bottles */
bottles = 99;
while (bottles >= 0) {
print(bottles, " bottles of beer on the wall\n");
print(bottles, " bottles of beer\n");
print("Take one down, pass it around\n");
print(bottles, " bottles of beer on the wall\n\n");
bottles = bottles - 1;
}
</lang>
| style="vertical-align:top" |
<b><pre>
2 1 Identifier bottles
2 9 Op_assign
2 11 Integer 99
2 13 Semicolon
3 1 Keyword_while
3 7 LeftParen
3 8 Identifier bottles
3 16 Op_greaterequal
3 19 Integer 0
3 20 RightParen
3 22 LeftBrace
4 5 Keyword_print
4 10 LeftParen
4 11 Identifier bottles
4 18 Comma
4 20 String " bottles of beer on the wall\n"
4 52 RightParen
4 53 Semicolon
5 5 Keyword_print
5 10 LeftParen
5 11 Identifier bottles
5 18 Comma
5 20 String " bottles of beer\n"
5 40 RightParen
5 41 Semicolon
6 5 Keyword_print
6 10 LeftParen
6 11 String "Take one down, pass it around\n"
6 44 RightParen
6 45 Semicolon
7 5 Keyword_print
7 10 LeftParen
7 11 Identifier bottles
7 18 Comma
7 20 String " bottles of beer on the wall\n\n"
7 54 RightParen
7 55 Semicolon
8 5 Identifier bottles
8 13 Op_assign
8 15 Identifier bottles
8 23 Op_subtract
8 25 Integer 1
8 26 Semicolon
9 1 RightBrace
10 1 End_of_input
</pre></b>
| style="vertical-align:top" |
<b><pre>
Sequence
Sequence
;
Assign
Identifier bottles
Integer 99
While
Greater
Identifier bottles
Integer 0
Sequence
Sequence
Sequence
Sequence
Sequence
;
Sequence
Sequence
;
Prti
Identifier bottles
;
Prts
String " bottles of beer on the wall\n"
;
Sequence
Sequence
;
Prti
Identifier bottles
;
Prts
String " bottles of beer\n"
;
Sequence
;
Prts
String "Take one down, pass it around\n"
;
Sequence
Sequence
;
Prti
Identifier bottles
;
Prts
String " bottles of beer on the wall\n\n"
;
Assign
Identifier bottles
Subtract
Identifier bottles
Integer 1
</pre></b>
| style="vertical-align:top" |
<b><pre>
Datasize: 1 Strings: 4
" bottles of beer on the wall\n"
" bottles of beer\n"
"Take one down, pass it around\n"
" bottles of beer on the wall\n\n"
0 push 99
5 store [0]
10 fetch [0]
15 push 0
20 gt
21 jz (67) 89
26 fetch [0]
31 prti
32 push 0
37 prts
38 fetch [0]
43 prti
44 push 1
49 prts
50 push 2
55 prts
56 fetch [0]
61 prti
62 push 3
67 prts
68 fetch [0]
73 push 1
78 sub
79 store [0]
84 jmp (-75) 10
89 halt
</pre></b>
|}
=={{header|Ascii Mandlebrot}}==
{| class="wikitable"
|-
! Input to lex
! Output from lex, input to parse
! Output from parse
! Output from gen, input to VM
|-
| style="vertical-align:top" |
<lang c>
{
/*
This is an integer ascii Mandelbrot generator
*/
left_edge = -420;
right_edge = 300;
top_edge = 300;
bottom_edge = -300;
x_step = 7;
y_step = 15;
max_iter = 200;
y0 = top_edge;
while (y0 > bottom_edge) {
x0 = left_edge;
while (x0 < right_edge) {
y = 0;
x = 0;
the_char = ' ';
i = 0;
while (i < max_iter) {
x_x = (x * x) / 200;
y_y = (y * y) / 200;
if (x_x + y_y > 800 ) {
the_char = '0' + i;
if (i > 9) {
the_char = '@';
}
i = max_iter;
}
y = x * y / 100 + y0;
x = x_x - y_y + x0;
i = i + 1;
}
putc(the_char);
x0 = x0 + x_step;
}
putc('\n');
y0 = y0 - y_step;
}
}
</lang>
| style="vertical-align:top" |
<b><pre>
1 1 LeftBrace
5 5 Identifier left_edge
5 17 Op_assign
5 19 Op_subtract
5 20 Integer 420
5 23 Semicolon
6 5 Identifier right_edge
6 17 Op_assign
6 20 Integer 300
6 23 Semicolon
7 5 Identifier top_edge
7 17 Op_assign
7 20 Integer 300
7 23 Semicolon
8 5 Identifier bottom_edge
8 17 Op_assign
8 19 Op_subtract
8 20 Integer 300
8 23 Semicolon
9 5 Identifier x_step
9 17 Op_assign
9 22 Integer 7
9 23 Semicolon
10 5 Identifier y_step
10 17 Op_assign
10 21 Integer 15
10 23 Semicolon
12 5 Identifier max_iter
12 17 Op_assign
12 20 Integer 200
12 23 Semicolon
14 5 Identifier y0
14 8 Op_assign
14 10 Identifier top_edge
14 18 Semicolon
15 5 Keyword_while
15 11 LeftParen
15 12 Identifier y0
15 15 Op_greater
15 17 Identifier bottom_edge
15 28 RightParen
15 30 LeftBrace
16 9 Identifier x0
16 12 Op_assign
16 14 Identifier left_edge
16 23 Semicolon
17 9 Keyword_while
17 15 LeftParen
17 16 Identifier x0
17 19 Op_less
17 21 Identifier right_edge
17 31 RightParen
17 33 LeftBrace
18 13 Identifier y
18 15 Op_assign
18 17 Integer 0
18 18 Semicolon
19 13 Identifier x
19 15 Op_assign
19 17 Integer 0
19 18 Semicolon
20 13 Identifier the_char
20 22 Op_assign
20 24 Integer 32
20 27 Semicolon
21 13 Identifier i
21 15 Op_assign
21 17 Integer 0
21 18 Semicolon
22 13 Keyword_while
22 19 LeftParen
22 20 Identifier i
22 22 Op_less
22 24 Identifier max_iter
22 32 RightParen
22 34 LeftBrace
23 17 Identifier x_x
23 21 Op_assign
23 23 LeftParen
23 24 Identifier x
23 26 Op_multiply
23 28 Identifier x
23 29 RightParen
23 31 Op_divide
23 33 Integer 200
23 36 Semicolon
24 17 Identifier y_y
24 21 Op_assign
24 23 LeftParen
24 24 Identifier y
24 26 Op_multiply
24 28 Identifier y
24 29 RightParen
24 31 Op_divide
24 33 Integer 200
24 36 Semicolon
25 17 Keyword_if
25 20 LeftParen
25 21 Identifier x_x
25 25 Op_add
25 27 Identifier y_y
25 31 Op_greater
25 33 Integer 800
25 37 RightParen
25 39 LeftBrace
26 21 Identifier the_char
26 30 Op_assign
26 32 Integer 48
26 36 Op_add
26 38 Identifier i
26 39 Semicolon
27 21 Keyword_if
27 24 LeftParen
27 25 Identifier i
27 27 Op_greater
27 29 Integer 9
27 30 RightParen
27 32 LeftBrace
28 25 Identifier the_char
28 34 Op_assign
28 36 Integer 64
28 39 Semicolon
29 21 RightBrace
30 21 Identifier i
30 23 Op_assign
30 25 Identifier max_iter
30 33 Semicolon
31 17 RightBrace
32 17 Identifier y
32 19 Op_assign
32 21 Identifier x
32 23 Op_multiply
32 25 Identifier y
32 27 Op_divide
32 29 Integer 100
32 33 Op_add
32 35 Identifier y0
32 37 Semicolon
33 17 Identifier x
33 19 Op_assign
33 21 Identifier x_x
33 25 Op_subtract
33 27 Identifier y_y
33 31 Op_add
33 33 Identifier x0
33 35 Semicolon
34 17 Identifier i
34 19 Op_assign
34 21 Identifier i
34 23 Op_add
34 25 Integer 1
34 26 Semicolon
35 13 RightBrace
36 13 Keyword_putc
36 17 LeftParen
36 18 Identifier the_char
36 26 RightParen
36 27 Semicolon
37 13 Identifier x0
37 16 Op_assign
37 18 Identifier x0
37 21 Op_add
37 23 Identifier x_step
37 29 Semicolon
38 9 RightBrace
39 9 Keyword_putc
39 13 LeftParen
39 14 Integer 10
39 18 RightParen
39 19 Semicolon
40 9 Identifier y0
40 12 Op_assign
40 14 Identifier y0
40 17 Op_subtract
40 19 Identifier y_step
40 25 Semicolon
41 5 RightBrace
42 1 RightBrace
43 1 End_of_input
</pre></b>
| style="vertical-align:top" |
<b><pre>
Sequence
;
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier left_edge
Negate
Integer 420
;
Assign
Identifier right_edge
Integer 300
Assign
Identifier top_edge
Integer 300
Assign
Identifier bottom_edge
Negate
Integer 300
;
Assign
Identifier x_step
Integer 7
Assign
Identifier y_step
Integer 15
Assign
Identifier max_iter
Integer 200
Assign
Identifier y0
Identifier top_edge
While
Greater
Identifier y0
Identifier bottom_edge
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier x0
Identifier left_edge
While
Less
Identifier x0
Identifier right_edge
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier y
Integer 0
Assign
Identifier x
Integer 0
Assign
Identifier the_char
Integer 32
Assign
Identifier i
Integer 0
While
Less
Identifier i
Identifier max_iter
Sequence
Sequence
Sequence
Sequence
Sequence
Sequence
;
Assign
Identifier x_x
Divide
Multiply
Identifier x
Identifier x
Integer 200
Assign
Identifier y_y
Divide
Multiply
Identifier y
Identifier y
Integer 200
If
Greater
Add
Identifier x_x
Identifier y_y
Integer 800
If
Sequence
Sequence
Sequence
;
Assign
Identifier the_char
Add
Integer 48
Identifier i
If
Greater
Identifier i
Integer 9
If
Sequence
;
Assign
Identifier the_char
Integer 64
;
Assign
Identifier i
Identifier max_iter
;
Assign
Identifier y
Add
Divide
Multiply
Identifier x
Identifier y
Integer 100
Identifier y0
Assign
Identifier x
Add
Subtract
Identifier x_x
Identifier y_y
Identifier x0
Assign
Identifier i
Add
Identifier i
Integer 1
Prtc
Identifier the_char
;
Assign
Identifier x0
Add
Identifier x0
Identifier x_step
Prtc
Integer 10
;
Assign
Identifier y0
Subtract
Identifier y0
Identifier y_step
</pre></b>
| style="vertical-align:top" |
<b><pre>
Datasize: 15 Strings: 0
0 push 420
5 neg
6 store [0]
11 push 300
16 store [1]
21 push 300
26 store [2]
31 push 300
36 neg
37 store [3]
42 push 7
47 store [4]
52 push 15
57 store [5]
62 push 200
67 store [6]
72 fetch [2]
77 store [7]
82 fetch [7]
87 fetch [3]
92 gt
93 jz (329) 423
98 fetch [0]
103 store [8]
108 fetch [8]
113 fetch [1]
118 lt
119 jz (276) 396
124 push 0
129 store [9]
134 push 0
139 store [10]
144 push 32
149 store [11]
154 push 0
159 store [12]
164 fetch [12]
169 fetch [6]
174 lt
175 jz (193) 369
180 fetch [10]
185 fetch [10]
190 mul
191 push 200
196 div
197 store [13]
202 fetch [9]
207 fetch [9]
212 mul
213 push 200
218 div
219 store [14]
224 fetch [13]
229 fetch [14]
234 add
235 push 800
240 gt
241 jz (56) 298
246 push 48
251 fetch [12]
256 add
257 store [11]
262 fetch [12]
267 push 9
272 gt
273 jz (14) 288
278 push 64
283 store [11]
288 fetch [6]
293 store [12]
298 fetch [10]
303 fetch [9]
308 mul
309 push 100
314 div
315 fetch [7]
320 add
321 store [9]
326 fetch [13]
331 fetch [14]
336 sub
337 fetch [8]
342 add
343 store [10]
348 fetch [12]
353 push 1
358 add
359 store [12]
364 jmp (-201) 164
369 fetch [11]
374 prtc
375 fetch [8]
380 fetch [4]
385 add
386 store [8]
391 jmp (-284) 108
396 push 10
401 prtc
402 fetch [7]
407 fetch [5]
412 sub
413 store [7]
418 jmp (-337) 82
423 halt
</pre></b>
|}
|
Revision as of 22:35, 22 October 2016
Compute the GCD of two numbers
Input to lex | Output from lex, input to parse | Output from parse, input to gen | Output from gen, input to VM |
---|---|---|---|
<lang c> /* Compute the gcd of 1071, 1029: 21 */ a = 1071; b = 1029; while (b != 0) { new_a = b; b = a % b; a = new_a; } print(a); </lang>
|
3 1 Identifier a 3 3 Op_assign 3 5 Integer 1071 3 9 Semicolon 4 1 Identifier b 4 3 Op_assign 4 5 Integer 1029 4 9 Semicolon 6 1 Keyword_while 6 7 LeftParen 6 8 Identifier b 6 10 Op_notequal 6 13 Integer 0 6 14 RightParen 6 16 LeftBrace 7 5 Identifier new_a 7 11 Op_assign 7 13 Identifier b 7 14 Semicolon 8 5 Identifier b 8 11 Op_assign 8 13 Identifier a 8 15 Op_mod 8 17 Identifier b 8 18 Semicolon 9 5 Identifier a 9 11 Op_assign 9 13 Identifier new_a 9 18 Semicolon 10 1 RightBrace 11 1 Keyword_print 11 6 LeftParen 11 7 Identifier a 11 8 RightParen 11 9 Semicolon 12 1 End_of_input
|
Sequence Sequence Sequence Sequence ; Assign Identifier a Integer 1071 Assign Identifier b Integer 1029 While NotEqual Identifier b Integer 0 Sequence Sequence Sequence ; Assign Identifier new_a Identifier b Assign Identifier b Mod Identifier a Identifier b Assign Identifier a Identifier new_a Sequence ; Prti Identifier a ;
|
Datasize: 3 Strings: 0 0 push 1071 5 store [0] 10 push 1029 15 store [1] 20 fetch [1] 25 push 0 30 ne 31 jz (45) 77 36 fetch [1] 41 store [2] 46 fetch [0] 51 fetch [1] 56 mod 57 store [1] 62 fetch [2] 67 store [0] 72 jmp (-53) 20 77 fetch [0] 82 prti 83 halt |
Factorial
Input to lex | Output from lex, input to parse | Output from parse | Output from gen, input to VM |
---|---|---|---|
<lang c> /* 12 factorial is 479001600 */ n = 12; result = 1; i = 1; while (i <= n) { result = result * i; i = i + 1; } print(result); </lang>
|
3 1 Identifier n 3 3 Op_assign 3 5 Integer 12 3 7 Semicolon 4 1 Identifier result 4 8 Op_assign 4 10 Integer 1 4 11 Semicolon 5 1 Identifier i 5 3 Op_assign 5 5 Integer 1 5 6 Semicolon 6 1 Keyword_while 6 7 LeftParen 6 8 Identifier i 6 10 Op_lessequal 6 13 Identifier n 6 14 RightParen 6 16 LeftBrace 7 5 Identifier result 7 12 Op_assign 7 14 Identifier result 7 21 Op_multiply 7 23 Identifier i 7 24 Semicolon 8 5 Identifier i 8 7 Op_assign 8 9 Identifier i 8 11 Op_add 8 13 Integer 1 8 14 Semicolon 9 1 RightBrace 10 1 Keyword_print 10 6 LeftParen 10 7 Identifier result 10 13 RightParen 10 14 Semicolon 11 1 End_of_input
|
Sequence Sequence Sequence Sequence Sequence ; Assign Identifier n Integer 12 Assign Identifier result Integer 1 Assign Identifier i Integer 1 While LessEqual Identifier i Identifier n Sequence Sequence ; Assign Identifier result Multiply Identifier result Identifier i Assign Identifier i Add Identifier i Integer 1 Sequence ; Prti Identifier result ;
|
Datasize: 3 Strings: 0 0 push 12 5 store [0] 10 push 1 15 store [1] 20 push 1 25 store [2] 30 fetch [2] 35 fetch [0] 40 le 41 jz (41) 83 46 fetch [1] 51 fetch [2] 56 mul 57 store [1] 62 fetch [2] 67 push 1 72 add 73 store [2] 78 jmp (-49) 30 83 fetch [1] 88 prti 89 halt |
Fibonacci
Input to lex | Output from lex, input to parse | Output from parse | Output from gen, input to VM |
---|---|---|---|
<lang c> /* fibonacci of 44 is 701408733 */ n = 44; i = 1; a = 0; b = 1; while (i < n) { w = a + b; a = b; b = w; i = i + 1; } print(w, "\n"); </lang>
|
3 1 Identifier n 3 3 Op_assign 3 5 Integer 44 3 7 Semicolon 4 1 Identifier i 4 3 Op_assign 4 5 Integer 1 4 6 Semicolon 5 1 Identifier a 5 3 Op_assign 5 5 Integer 0 5 6 Semicolon 6 1 Identifier b 6 3 Op_assign 6 5 Integer 1 6 6 Semicolon 7 1 Keyword_while 7 7 LeftParen 7 8 Identifier i 7 10 Op_less 7 12 Identifier n 7 13 RightParen 7 15 LeftBrace 8 5 Identifier w 8 7 Op_assign 8 9 Identifier a 8 11 Op_add 8 13 Identifier b 8 14 Semicolon 9 5 Identifier a 9 7 Op_assign 9 9 Identifier b 9 10 Semicolon 10 5 Identifier b 10 7 Op_assign 10 9 Identifier w 10 10 Semicolon 11 5 Identifier i 11 7 Op_assign 11 9 Identifier i 11 11 Op_add 11 13 Integer 1 11 14 Semicolon 12 1 RightBrace 13 1 Keyword_print 13 6 LeftParen 13 7 Identifier w 13 8 Comma 13 10 String "\n" 13 14 RightParen 13 15 Semicolon 15 1 End_of_input
|
Sequence Sequence Sequence Sequence Sequence Sequence ; Assign Identifier n Integer 44 Assign Identifier i Integer 1 Assign Identifier a Integer 0 Assign Identifier b Integer 1 While Less Identifier i Identifier n Sequence Sequence Sequence Sequence ; Assign Identifier w Add Identifier a Identifier b Assign Identifier a Identifier b Assign Identifier b Identifier w Assign Identifier i Add Identifier i Integer 1 Sequence Sequence ; Prti Identifier w ; Prts String "\n" ;
|
Datasize: 5 Strings: 1 "\n" 0 push 44 5 store [0] 10 push 1 15 store [1] 20 push 0 25 store [2] 30 push 1 35 store [3] 40 fetch [1] 45 fetch [0] 50 lt 51 jz (61) 113 56 fetch [2] 61 fetch [3] 66 add 67 store [4] 72 fetch [3] 77 store [2] 82 fetch [4] 87 store [3] 92 fetch [1] 97 push 1 102 add 103 store [1] 108 jmp (-69) 40 113 fetch [4] 118 prti 119 push 0 124 prts 125 halt |
FizzBuzz
Input to lex | Output from lex, input to parse | Output from parse | Output from gen, input to VM |
---|---|---|---|
<lang c> /* FizzBuzz */ i = 1; while (i <= 100) { if (!(i % 15)) print("FizzBuzz"); else if (!(i % 3)) print("Fizz"); else if (!(i % 5)) print("Buzz"); else print(i); print("\n"); i = i + 1; } </lang>
|
2 1 Identifier i 2 3 Op_assign 2 5 Integer 1 2 6 Semicolon 3 1 Keyword_while 3 7 LeftParen 3 8 Identifier i 3 10 Op_lessequal 3 13 Integer 100 3 16 RightParen 3 18 LeftBrace 4 5 Keyword_if 4 8 LeftParen 4 9 Op_not 4 10 LeftParen 4 11 Identifier i 4 13 Op_mod 4 15 Integer 15 4 17 RightParen 4 18 RightParen 5 9 Keyword_print 5 14 LeftParen 5 15 String "FizzBuzz" 5 25 RightParen 5 26 Semicolon 6 5 Keyword_else 6 10 Keyword_if 6 13 LeftParen 6 14 Op_not 6 15 LeftParen 6 16 Identifier i 6 18 Op_mod 6 20 Integer 3 6 21 RightParen 6 22 RightParen 7 9 Keyword_print 7 14 LeftParen 7 15 String "Fizz" 7 21 RightParen 7 22 Semicolon 8 5 Keyword_else 8 10 Keyword_if 8 13 LeftParen 8 14 Op_not 8 15 LeftParen 8 16 Identifier i 8 18 Op_mod 8 20 Integer 5 8 21 RightParen 8 22 RightParen 9 9 Keyword_print 9 14 LeftParen 9 15 String "Buzz" 9 21 RightParen 9 22 Semicolon 10 5 Keyword_else 11 9 Keyword_print 11 14 LeftParen 11 15 Identifier i 11 16 RightParen 11 17 Semicolon 13 5 Keyword_print 13 10 LeftParen 13 11 String "\n" 13 15 RightParen 13 16 Semicolon 14 5 Identifier i 14 7 Op_assign 14 9 Identifier i 14 11 Op_add 14 13 Integer 1 14 14 Semicolon 15 1 RightBrace 16 1 End_of_input
|
Sequence Sequence ; Assign Identifier i Integer 1 While LessEqual Identifier i Integer 100 Sequence Sequence Sequence ; If Not Mod Identifier i Integer 15 ; If Sequence ; Prts String "FizzBuzz" ; If Not Mod Identifier i Integer 3 ; If Sequence ; Prts String "Fizz" ; If Not Mod Identifier i Integer 5 ; If Sequence ; Prts String "Buzz" ; Sequence ; Prti Identifier i ; Sequence ; Prts String "\n" ; Assign Identifier i Add Identifier i Integer 1
|
Datasize: 1 Strings: 4 "FizzBuzz" "Fizz" "Buzz" "\n" 0 push 1 5 store [0] 10 fetch [0] 15 push 100 20 le 21 jz (121) 143 26 fetch [0] 31 push 15 36 mod 37 not 38 jz (15) 54 43 push 0 48 prts 49 jmp (66) 116 54 fetch [0] 59 push 3 64 mod 65 not 66 jz (15) 82 71 push 1 76 prts 77 jmp (38) 116 82 fetch [0] 87 push 5 92 mod 93 not 94 jz (15) 110 99 push 2 104 prts 105 jmp (10) 116 110 fetch [0] 115 prti 116 push 3 121 prts 122 fetch [0] 127 push 1 132 add 133 store [0] 138 jmp (-129) 10 143 halt |
99 Bottles
Input to lex | Output from lex, input to parse | Output from parse | Output from gen, input to VM |
---|---|---|---|
<lang c> /* 99 bottles */ bottles = 99; while (bottles >= 0) { print(bottles, " bottles of beer on the wall\n"); print(bottles, " bottles of beer\n"); print("Take one down, pass it around\n"); print(bottles, " bottles of beer on the wall\n\n"); bottles = bottles - 1; } </lang>
|
2 1 Identifier bottles 2 9 Op_assign 2 11 Integer 99 2 13 Semicolon 3 1 Keyword_while 3 7 LeftParen 3 8 Identifier bottles 3 16 Op_greaterequal 3 19 Integer 0 3 20 RightParen 3 22 LeftBrace 4 5 Keyword_print 4 10 LeftParen 4 11 Identifier bottles 4 18 Comma 4 20 String " bottles of beer on the wall\n" 4 52 RightParen 4 53 Semicolon 5 5 Keyword_print 5 10 LeftParen 5 11 Identifier bottles 5 18 Comma 5 20 String " bottles of beer\n" 5 40 RightParen 5 41 Semicolon 6 5 Keyword_print 6 10 LeftParen 6 11 String "Take one down, pass it around\n" 6 44 RightParen 6 45 Semicolon 7 5 Keyword_print 7 10 LeftParen 7 11 Identifier bottles 7 18 Comma 7 20 String " bottles of beer on the wall\n\n" 7 54 RightParen 7 55 Semicolon 8 5 Identifier bottles 8 13 Op_assign 8 15 Identifier bottles 8 23 Op_subtract 8 25 Integer 1 8 26 Semicolon 9 1 RightBrace 10 1 End_of_input
|
Sequence Sequence ; Assign Identifier bottles Integer 99 While Greater Identifier bottles Integer 0 Sequence Sequence Sequence Sequence Sequence ; Sequence Sequence ; Prti Identifier bottles ; Prts String " bottles of beer on the wall\n" ; Sequence Sequence ; Prti Identifier bottles ; Prts String " bottles of beer\n" ; Sequence ; Prts String "Take one down, pass it around\n" ; Sequence Sequence ; Prti Identifier bottles ; Prts String " bottles of beer on the wall\n\n" ; Assign Identifier bottles Subtract Identifier bottles Integer 1
|
Datasize: 1 Strings: 4 " bottles of beer on the wall\n" " bottles of beer\n" "Take one down, pass it around\n" " bottles of beer on the wall\n\n" 0 push 99 5 store [0] 10 fetch [0] 15 push 0 20 gt 21 jz (67) 89 26 fetch [0] 31 prti 32 push 0 37 prts 38 fetch [0] 43 prti 44 push 1 49 prts 50 push 2 55 prts 56 fetch [0] 61 prti 62 push 3 67 prts 68 fetch [0] 73 push 1 78 sub 79 store [0] 84 jmp (-75) 10 89 halt |
Ascii Mandlebrot
Input to lex | Output from lex, input to parse | Output from parse | Output from gen, input to VM |
---|---|---|---|
<lang c> { /* This is an integer ascii Mandelbrot generator */ left_edge = -420; right_edge = 300; top_edge = 300; bottom_edge = -300; x_step = 7; y_step = 15; max_iter = 200; y0 = top_edge; while (y0 > bottom_edge) { x0 = left_edge; while (x0 < right_edge) { y = 0; x = 0; the_char = ' '; i = 0; while (i < max_iter) { x_x = (x * x) / 200; y_y = (y * y) / 200; if (x_x + y_y > 800 ) { the_char = '0' + i; if (i > 9) { the_char = '@'; } i = max_iter; } y = x * y / 100 + y0; x = x_x - y_y + x0; i = i + 1; } putc(the_char); x0 = x0 + x_step; } putc('\n'); y0 = y0 - y_step; } } </lang>
|
1 1 LeftBrace 5 5 Identifier left_edge 5 17 Op_assign 5 19 Op_subtract 5 20 Integer 420 5 23 Semicolon 6 5 Identifier right_edge 6 17 Op_assign 6 20 Integer 300 6 23 Semicolon 7 5 Identifier top_edge 7 17 Op_assign 7 20 Integer 300 7 23 Semicolon 8 5 Identifier bottom_edge 8 17 Op_assign 8 19 Op_subtract 8 20 Integer 300 8 23 Semicolon 9 5 Identifier x_step 9 17 Op_assign 9 22 Integer 7 9 23 Semicolon 10 5 Identifier y_step 10 17 Op_assign 10 21 Integer 15 10 23 Semicolon 12 5 Identifier max_iter 12 17 Op_assign 12 20 Integer 200 12 23 Semicolon 14 5 Identifier y0 14 8 Op_assign 14 10 Identifier top_edge 14 18 Semicolon 15 5 Keyword_while 15 11 LeftParen 15 12 Identifier y0 15 15 Op_greater 15 17 Identifier bottom_edge 15 28 RightParen 15 30 LeftBrace 16 9 Identifier x0 16 12 Op_assign 16 14 Identifier left_edge 16 23 Semicolon 17 9 Keyword_while 17 15 LeftParen 17 16 Identifier x0 17 19 Op_less 17 21 Identifier right_edge 17 31 RightParen 17 33 LeftBrace 18 13 Identifier y 18 15 Op_assign 18 17 Integer 0 18 18 Semicolon 19 13 Identifier x 19 15 Op_assign 19 17 Integer 0 19 18 Semicolon 20 13 Identifier the_char 20 22 Op_assign 20 24 Integer 32 20 27 Semicolon 21 13 Identifier i 21 15 Op_assign 21 17 Integer 0 21 18 Semicolon 22 13 Keyword_while 22 19 LeftParen 22 20 Identifier i 22 22 Op_less 22 24 Identifier max_iter 22 32 RightParen 22 34 LeftBrace 23 17 Identifier x_x 23 21 Op_assign 23 23 LeftParen 23 24 Identifier x 23 26 Op_multiply 23 28 Identifier x 23 29 RightParen 23 31 Op_divide 23 33 Integer 200 23 36 Semicolon 24 17 Identifier y_y 24 21 Op_assign 24 23 LeftParen 24 24 Identifier y 24 26 Op_multiply 24 28 Identifier y 24 29 RightParen 24 31 Op_divide 24 33 Integer 200 24 36 Semicolon 25 17 Keyword_if 25 20 LeftParen 25 21 Identifier x_x 25 25 Op_add 25 27 Identifier y_y 25 31 Op_greater 25 33 Integer 800 25 37 RightParen 25 39 LeftBrace 26 21 Identifier the_char 26 30 Op_assign 26 32 Integer 48 26 36 Op_add 26 38 Identifier i 26 39 Semicolon 27 21 Keyword_if 27 24 LeftParen 27 25 Identifier i 27 27 Op_greater 27 29 Integer 9 27 30 RightParen 27 32 LeftBrace 28 25 Identifier the_char 28 34 Op_assign 28 36 Integer 64 28 39 Semicolon 29 21 RightBrace 30 21 Identifier i 30 23 Op_assign 30 25 Identifier max_iter 30 33 Semicolon 31 17 RightBrace 32 17 Identifier y 32 19 Op_assign 32 21 Identifier x 32 23 Op_multiply 32 25 Identifier y 32 27 Op_divide 32 29 Integer 100 32 33 Op_add 32 35 Identifier y0 32 37 Semicolon 33 17 Identifier x 33 19 Op_assign 33 21 Identifier x_x 33 25 Op_subtract 33 27 Identifier y_y 33 31 Op_add 33 33 Identifier x0 33 35 Semicolon 34 17 Identifier i 34 19 Op_assign 34 21 Identifier i 34 23 Op_add 34 25 Integer 1 34 26 Semicolon 35 13 RightBrace 36 13 Keyword_putc 36 17 LeftParen 36 18 Identifier the_char 36 26 RightParen 36 27 Semicolon 37 13 Identifier x0 37 16 Op_assign 37 18 Identifier x0 37 21 Op_add 37 23 Identifier x_step 37 29 Semicolon 38 9 RightBrace 39 9 Keyword_putc 39 13 LeftParen 39 14 Integer 10 39 18 RightParen 39 19 Semicolon 40 9 Identifier y0 40 12 Op_assign 40 14 Identifier y0 40 17 Op_subtract 40 19 Identifier y_step 40 25 Semicolon 41 5 RightBrace 42 1 RightBrace 43 1 End_of_input
|
Sequence ; Sequence Sequence Sequence Sequence Sequence Sequence Sequence Sequence Sequence ; Assign Identifier left_edge Negate Integer 420 ; Assign Identifier right_edge Integer 300 Assign Identifier top_edge Integer 300 Assign Identifier bottom_edge Negate Integer 300 ; Assign Identifier x_step Integer 7 Assign Identifier y_step Integer 15 Assign Identifier max_iter Integer 200 Assign Identifier y0 Identifier top_edge While Greater Identifier y0 Identifier bottom_edge Sequence Sequence Sequence Sequence ; Assign Identifier x0 Identifier left_edge While Less Identifier x0 Identifier right_edge Sequence Sequence Sequence Sequence Sequence Sequence Sequence ; Assign Identifier y Integer 0 Assign Identifier x Integer 0 Assign Identifier the_char Integer 32 Assign Identifier i Integer 0 While Less Identifier i Identifier max_iter Sequence Sequence Sequence Sequence Sequence Sequence ; Assign Identifier x_x Divide Multiply Identifier x Identifier x Integer 200 Assign Identifier y_y Divide Multiply Identifier y Identifier y Integer 200 If Greater Add Identifier x_x Identifier y_y Integer 800 If Sequence Sequence Sequence ; Assign Identifier the_char Add Integer 48 Identifier i If Greater Identifier i Integer 9 If Sequence ; Assign Identifier the_char Integer 64 ; Assign Identifier i Identifier max_iter ; Assign Identifier y Add Divide Multiply Identifier x Identifier y Integer 100 Identifier y0 Assign Identifier x Add Subtract Identifier x_x Identifier y_y Identifier x0 Assign Identifier i Add Identifier i Integer 1 Prtc Identifier the_char ; Assign Identifier x0 Add Identifier x0 Identifier x_step Prtc Integer 10 ; Assign Identifier y0 Subtract Identifier y0 Identifier y_step
|
Datasize: 15 Strings: 0 0 push 420 5 neg 6 store [0] 11 push 300 16 store [1] 21 push 300 26 store [2] 31 push 300 36 neg 37 store [3] 42 push 7 47 store [4] 52 push 15 57 store [5] 62 push 200 67 store [6] 72 fetch [2] 77 store [7] 82 fetch [7] 87 fetch [3] 92 gt 93 jz (329) 423 98 fetch [0] 103 store [8] 108 fetch [8] 113 fetch [1] 118 lt 119 jz (276) 396 124 push 0 129 store [9] 134 push 0 139 store [10] 144 push 32 149 store [11] 154 push 0 159 store [12] 164 fetch [12] 169 fetch [6] 174 lt 175 jz (193) 369 180 fetch [10] 185 fetch [10] 190 mul 191 push 200 196 div 197 store [13] 202 fetch [9] 207 fetch [9] 212 mul 213 push 200 218 div 219 store [14] 224 fetch [13] 229 fetch [14] 234 add 235 push 800 240 gt 241 jz (56) 298 246 push 48 251 fetch [12] 256 add 257 store [11] 262 fetch [12] 267 push 9 272 gt 273 jz (14) 288 278 push 64 283 store [11] 288 fetch [6] 293 store [12] 298 fetch [10] 303 fetch [9] 308 mul 309 push 100 314 div 315 fetch [7] 320 add 321 store [9] 326 fetch [13] 331 fetch [14] 336 sub 337 fetch [8] 342 add 343 store [10] 348 fetch [12] 353 push 1 358 add 359 store [12] 364 jmp (-201) 164 369 fetch [11] 374 prtc 375 fetch [8] 380 fetch [4] 385 add 386 store [8] 391 jmp (-284) 108 396 push 10 401 prtc 402 fetch [7] 407 fetch [5] 412 sub 413 store [7] 418 jmp (-337) 82 423 halt |