print foobar PRINT FETCH foobar 0 do{ my $foobar = 0; print $foobar, "\n" };1 0 ---------------------------------------------------------------------- # inspired by https://rosettacode.org/wiki/Compiler/Sample_programs#Factorial n = fact = 1; fact = fact * n = n + 1 while n < 12; print fact; # 12 factorial is 479001600 STMT STORE n STORE fact 1 WHILE STORE fact MULTIPLY FETCH fact STORE n ADD FETCH n 1 LT FETCH n 12 PRINT FETCH fact 479001600 do{ my $fact = my $n = 0; $n = $fact = "1"; while(do{do{$n} < do{"12"}}){do{$fact = do{$fact} * do{$n = do{$n} + do{"1"}}}};print $fact, "\n" };1 479001600 ---------------------------------------------------------------------- n = 1; # primes < 100 put 2; ( i = isprime = 2; n % i == 0 and isprime = 0 while isprime and ( i = i + 1 ) ** 2 - 1 < n; isprime and put ' ' . n; ) while ( n = n + 2 ) < 100; print '' # output just a newline STMT STORE n 1 PUT 2 WHILE STMT STORE i STORE isprime 2 WHILE AND EQ MOD FETCH n FETCH i 0 STORE isprime 0 AND FETCH isprime LT SUBTRACT POWER STORE i ADD FETCH i 1 2 1 FETCH n AND FETCH isprime PUT CONCAT ' ' FETCH n LT STORE n ADD FETCH n 2 100 PRINT '' 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 do{ my $i = my $isprime = my $n = 0; $n = "1";print "2" ; while(do{do{$n = do{$n} + do{"2"}} < do{"100"}}){do{$i = $isprime = "2"; while(do{do{$isprime} and do{do{do{do{$i = do{$i} + do{"1"}} ** do{"2"}} - do{"1"}} < do{$n}}}){do{do{do{do{$n} % do{$i}} == do{"0"}} and do{$isprime = "0"}}};do{$isprime} and do{print do{" "} . do{$n} }}};print "", "\n" };1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 ---------------------------------------------------------------------- ( put foo = foo + (foo < 20 ? 2 : 10); put ' ' ) while foo < 100; print '' STMT WHILE STMT PUT STORE foo ADD FETCH foo COND LT FETCH foo 20 2 10 PUT ' ' LT FETCH foo 100 PRINT '' 2 4 6 8 10 12 14 16 18 20 30 40 50 60 70 80 90 100 do{ my $foo = 0; while(do{do{$foo} < do{"100"}}){do{print $foo = do{$foo} + do{do{do{$foo} < do{"20"}} ?do{"2"}:do{"10"}} ;print " " }};print "", "\n" };1 2 4 6 8 10 12 14 16 18 20 30 40 50 60 70 80 90 100 ---------------------------------------------------------------------- stars = '*'; # triangle { print ' ' x ( 30 - n ) . stars; stars = stars . '**' } while (n = n + 1) < 11 STMT STORE stars * WHILE STMT PRINT CONCAT DUP ' ' SUBTRACT 30 FETCH n FETCH stars STORE stars CONCAT FETCH stars ** LT STORE n ADD FETCH n 1 11 * *** ***** ******* ********* *********** ************* *************** ***************** ******************* do{ my $n = my $stars = 0; $stars = "*"; while(do{do{$n = do{$n} + do{"1"}} < do{"11"}}){do{print do{do{" "} x do{do{"30"} - do{$n}}} . do{$stars}, "\n" ;$stars = do{$stars} . do{"**"}}}};1 * *** ***** ******* ********* *********** ************* *************** ***************** ******************* ---------------------------------------------------------------------- ch = 65; # A to Z ch = ch + 1 while ( putc ch ) < 90; print '' STMT STORE ch 65 WHILE STORE ch ADD FETCH ch 1 LT PUTC FETCH ch 90 PRINT '' ABCDEFGHIJKLMNOPQRSTUVWXYZ do{ my $ch = 0; $ch = "65"; while(do{do{do{local $@ = $ch; print chr $@ ; $@}} < do{"90"}}){do{$ch = do{$ch} + do{"1"}}};print "", "\n" };1 ABCDEFGHIJKLMNOPQRSTUVWXYZ ---------------------------------------------------------------------- # converted from # https://rosettacode.org/wiki/Compiler/Sample_programs#Fibonacci_sequence # fibonacci of 44 is 701408733 # n = 44; i = 1; a = 0; b = 1; { w = a + b; a = b; b = w; i = i + 1; } while (i < n); print w STMT STORE n 44 STORE i 1 STORE a 0 STORE b 1 WHILE STMT STORE w ADD FETCH a FETCH b STORE a FETCH b STORE b FETCH w STORE i ADD FETCH i 1 LT FETCH i FETCH n PRINT FETCH w 701408733 do{ my $a = my $b = my $i = my $n = my $w = 0; $n = "44";$i = "1";$a = "0";$b = "1"; while(do{do{$i} < do{$n}}){do{$w = do{$a} + do{$b};$a = $b;$b = $w;$i = do{$i} + do{"1"}}};print $w, "\n" };1 701408733 ---------------------------------------------------------------------- # converted from # https://rosettacode.org/wiki/Compiler/Sample_programs#Greatest_common_divisor # Compute the gcd of 1071, 1029: 21 # a = 1071; b = 1029; # { new_a = b; b = a % b; a = new_a; } while b; print a; STMT STORE a 1071 STORE b 1029 WHILE STMT STORE new_a FETCH b STORE b MOD FETCH a FETCH b STORE a FETCH new_a FETCH b PRINT FETCH a 21 do{ my $a = my $b = my $new_a = 0; $a = "1071";$b = "1029"; while(do{$b}){do{$new_a = $b;$b = do{$a} % do{$b};$a = $new_a}};print $a, "\n" };1 21 ---------------------------------------------------------------------- # This is an ascii Mandelbrot generator converted from # https://rosettacode.org/wiki/Compiler/Sample_programs#Ascii_Mandlebrot # left_edge = -420; right_edge = 300; top_edge = 300; bottom_edge = -300; x_step = 7; y_step = 15; # max_iter = 200; # y0 = top_edge; { x0 = left_edge; { x = y = i = 0; the_char = ' '; { x_x = x * x / 200; y_y = y * y / 200; (x_x + y_y > 800 ) and { the_char = i > 9 ? '@' : i; i = max_iter; }; y = x * y / 100 + y0; x = x_x - y_y + x0; i = i + 1; } while (i < max_iter) ; put(the_char); x0 = x0 + x_step; } while (x0 < right_edge) ; print ''; y0 = y0 - y_step; } while y0 > bottom_edge ; STMT STORE left_edge -420 STORE right_edge 300 STORE top_edge 300 STORE bottom_edge -300 STORE x_step 7 STORE y_step 15 STORE max_iter 200 STORE y0 FETCH top_edge WHILE STMT STORE x0 FETCH left_edge WHILE STMT STORE x STORE y STORE i 0 STORE the_char ' ' WHILE STMT STORE x_x DIVIDE MULTIPLY FETCH x FETCH x 200 STORE y_y DIVIDE MULTIPLY FETCH y FETCH y 200 AND GT ADD FETCH x_x FETCH y_y 800 STMT STORE the_char COND GT FETCH i 9 @ FETCH i STORE i FETCH max_iter STORE y ADD DIVIDE MULTIPLY FETCH x FETCH y 100 FETCH y0 STORE x ADD SUBTRACT FETCH x_x FETCH y_y FETCH x0 STORE i ADD FETCH i 1 LT FETCH i FETCH max_iter PUT FETCH the_char STORE x0 ADD FETCH x0 FETCH x_step LT FETCH x0 FETCH right_edge PRINT '' STORE y0 SUBTRACT FETCH y0 FETCH y_step GT FETCH y0 FETCH bottom_edge 1111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222211111 1111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222211 1111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222 1111111111111111222222222222222222233333333333333333333333222222222222222222222222222222222222222222222 1111111111111112222222222222333333333333333333333333333333333333322222222222222222222222222222222222222 1111111111111222222222233333333333333333333333334444457655544443333332222222222222222222222222222222222 1111111111112222222233333333333333333333333444444445567@@6665444444333333222222222222222222222222222222 11111111111222222333333333333333333333334444444445555678@@@@7654444443333332222222222222222222222222222 1111111112222223333333333333333333333444444444455556789@@@@98655544444433333332222222222222222222222222 1111111122222333333333333333333333344444444445556668@@@ @@@76555544444333333322222222222222222222222 1111111122233333333333333333333344444444445566667778@@ @987666555544433333333222222222222222222222 111111122333333333333333333333444444455556@@@@@99@@@@@@ @@@@@@87777@95443333333322222222222222222222 1111112233333333333333333334444455555556678@@ @@@ @@@@@@@@8544333333333222222222222222222 1111122333333333333333334445555555555666789@@@ @86554433333333322222222222222222 1111123333333333333444466666555556666778@@@@ @@87655443333333332222222222222222 111123333333344444455568@887789@87777889@@ @@@@65443333333332222222222222222 1111333344444444455556679@@@@@@@@@@@99@@@ @@765444333333333222222222222222 1111334444444455555567779@@ @@@@ @855444333333333222222222222222 11114444444455555668@99@@@ @ @@655444433333333322222222222222 11134555556666677789@@@@@ @86655444433333333322222222222222 111 @@876555444433333333322222222222222 11134555556666677789@@@@@ @86655444433333333322222222222222 11114444444455555668@99@@@ @ @@655444433333333322222222222222 1111334444444455555567779@@ @@@@ @855444333333333222222222222222 1111333344444444455556679@@@@@@@@@@@99@@@ @@765444333333333222222222222222 111123333333344444455568@887789@87777889@@ @@@@65443333333332222222222222222 1111123333333333333444466666555556666778@@@@ @@87655443333333332222222222222222 1111122333333333333333334445555555555666789@@@ @86554433333333322222222222222222 1111112233333333333333333334444455555556678@@ @@@ @@@@@@@@8544333333333222222222222222222 111111122333333333333333333333444444455556@@@@@99@@@@@@ @@@@@@87777@95443333333322222222222222222222 1111111122233333333333333333333344444444445566667778@@ @987666555544433333333222222222222222222222 1111111122222333333333333333333333344444444445556668@@@ @@@76555544444333333322222222222222222222222 1111111112222223333333333333333333333444444444455556789@@@@98655544444433333332222222222222222222222222 11111111111222222333333333333333333333334444444445555678@@@@7654444443333332222222222222222222222222222 1111111111112222222233333333333333333333333444444445567@@6665444444333333222222222222222222222222222222 1111111111111222222222233333333333333333333333334444457655544443333332222222222222222222222222222222222 1111111111111112222222222222333333333333333333333333333333333333322222222222222222222222222222222222222 1111111111111111222222222222222222233333333333333333333333222222222222222222222222222222222222222222222 1111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222 1111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222211 do{ my $bottom_edge = my $i = my $left_edge = my $max_iter = my $right_edge = my $the_char = my $top_edge = my $x = my $x0 = my $x_step = my $x_x = my $y = my $y0 = my $y_step = my $y_y = 0; $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(do{do{$y0} > do{$bottom_edge}}){do{$x0 = $left_edge; while(do{do{$x0} < do{$right_edge}}){do{$x = $y = $i = "0";$the_char = " "; while(do{do{$i} < do{$max_iter}}){do{$x_x = do{do{$x} * do{$x}} / do{"200"};$y_y = do{do{$y} * do{$y}} / do{"200"};do{do{do{$x_x} + do{$y_y}} > do{"800"}} and do{$the_char = do{do{$i} > do{"9"}} ?do{"@"}:do{$i};$i = $max_iter};$y = do{do{do{$x} * do{$y}} / do{"100"}} + do{$y0};$x = do{do{$x_x} - do{$y_y}} + do{$x0};$i = do{$i} + do{"1"}}};print $the_char ;$x0 = do{$x0} + do{$x_step}}};print "", "\n" ;$y0 = do{$y0} - do{$y_step}}}};1 1111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222211111 1111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222211 1111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222 1111111111111111222222222222222222233333333333333333333333222222222222222222222222222222222222222222222 1111111111111112222222222222333333333333333333333333333333333333322222222222222222222222222222222222222 1111111111111222222222233333333333333333333333334444457655544443333332222222222222222222222222222222222 1111111111112222222233333333333333333333333444444445567@@6665444444333333222222222222222222222222222222 11111111111222222333333333333333333333334444444445555678@@@@7654444443333332222222222222222222222222222 1111111112222223333333333333333333333444444444455556789@@@@98655544444433333332222222222222222222222222 1111111122222333333333333333333333344444444445556668@@@ @@@76555544444333333322222222222222222222222 1111111122233333333333333333333344444444445566667778@@ @987666555544433333333222222222222222222222 111111122333333333333333333333444444455556@@@@@99@@@@@@ @@@@@@87777@95443333333322222222222222222222 1111112233333333333333333334444455555556678@@ @@@ @@@@@@@@8544333333333222222222222222222 1111122333333333333333334445555555555666789@@@ @86554433333333322222222222222222 1111123333333333333444466666555556666778@@@@ @@87655443333333332222222222222222 111123333333344444455568@887789@87777889@@ @@@@65443333333332222222222222222 1111333344444444455556679@@@@@@@@@@@99@@@ @@765444333333333222222222222222 1111334444444455555567779@@ @@@@ @855444333333333222222222222222 11114444444455555668@99@@@ @ @@655444433333333322222222222222 11134555556666677789@@@@@ @86655444433333333322222222222222 111 @@876555444433333333322222222222222 11134555556666677789@@@@@ @86655444433333333322222222222222 11114444444455555668@99@@@ @ @@655444433333333322222222222222 1111334444444455555567779@@ @@@@ @855444333333333222222222222222 1111333344444444455556679@@@@@@@@@@@99@@@ @@765444333333333222222222222222 111123333333344444455568@887789@87777889@@ @@@@65443333333332222222222222222 1111123333333333333444466666555556666778@@@@ @@87655443333333332222222222222222 1111122333333333333333334445555555555666789@@@ @86554433333333322222222222222222 1111112233333333333333333334444455555556678@@ @@@ @@@@@@@@8544333333333222222222222222222 111111122333333333333333333333444444455556@@@@@99@@@@@@ @@@@@@87777@95443333333322222222222222222222 1111111122233333333333333333333344444444445566667778@@ @987666555544433333333222222222222222222222 1111111122222333333333333333333333344444444445556668@@@ @@@76555544444333333322222222222222222222222 1111111112222223333333333333333333333444444444455556789@@@@98655544444433333332222222222222222222222222 11111111111222222333333333333333333333334444444445555678@@@@7654444443333332222222222222222222222222222 1111111111112222222233333333333333333333333444444445567@@6665444444333333222222222222222222222222222222 1111111111111222222222233333333333333333333333334444457655544443333332222222222222222222222222222222222 1111111111111112222222222222333333333333333333333333333333333333322222222222222222222222222222222222222 1111111111111111222222222222222222233333333333333333333333222222222222222222222222222222222222222222222 1111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222 1111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222211 ----------------------------------------------------------------------