The PL/0 compiler processes PL/0 source code and produces PL/0 assembly language.
Example
Here is an example PL/0 program to generate the fibonacci sequence:
VAR m, n, k, count;
BEGIN
m := 1;
n := 1;
count := 0;
WHILE count <= 20 DO
BEGIN
k := n;
n := m + n;
m := k;
! k;
count := count + 1
END
END.
Using the PL/0 compiler we can convert this program to PL/0 assembly language:
$ ./pl0_compiler.py < examples/fibonacci.pl1 > examples/fibonacci.pl1a
The assembly code generated:
JMP main
t_var_m_1:
0
t_var_n_2:
0
t_var_k_3:
0
t_var_count_4:
0
main:
PUSH 1
SAVE t_var_m_1
PUSH 1
SAVE t_var_n_2
PUSH 1
SAVE t_var_k_3
PUSH 0
SAVE t_var_count_4
t_while_start_5:
LOAD t_var_count_4
PUSH 20
CMPLTE
JE t_while_end_6
LOAD t_var_k_3
PRINT
POP
LOAD t_var_n_2
SAVE t_var_k_3
LOAD t_var_m_1
LOAD t_var_n_2
ADD
SAVE t_var_n_2
LOAD t_var_k_3
SAVE t_var_m_1
LOAD t_var_count_4
PUSH 1
ADD
SAVE t_var_count_4
JMP t_while_start_5
t_while_end_6:
HALT