W PUBLIC/MRJP/Quadruples/ dostępny jest edukacyjny interpreter kodu czwórkowego iquadr}
Implementowany dialekt:
t2 := a + t1 pisane jako $.i2 := a.i3 + $.i1 (identyfikator przed kropką ma charakter li tylko komentarza)
$.i1 := b.d0
print $.i0
{rejestr+stała}, np. {sp.i1-1} := 2,a.i3 := {bp.i2+1}function main : int :
$.d3 := 1.0
lo.i0 := $.d3
hi.i1 := lo.i0
mx.i3 := 5000000
mx.i2 := $.i3
print lo.i0
L0:
if hi.i1 >= mx.i2 goto L1
print hi.i1
$.i3 := lo.i0 + hi.i1
hi.i1 := $.i3
$.i3 := hi.i1 - lo.i0
lo.i0 := $.i3
goto L0
L1:
function endWywołanie funkcji z przekazywaniem argumentów w rejestrach:
function main : int : $.i0 := -40 $.i0 := ~$.i0 $.d0 := 3.14159 call add print $.i0 function end function add : int -> double -> int : $.i1 := b.d0 result.i0 := a.i0 + $.i1 function end
Protokół wywołania funkcji przy użyciu stosu:
function main : int :
sp.i1 := 512
bp.i2 := sp.i1
{sp.i1-1} := 2
{sp.i1-2} := 3
sp.i1 := sp.i1 - 2
call add
print retval.i0
function end
function add : int -> int -> int :
sp.i1 := sp.i1 - 1
{sp.i1+0} := bp.i2
bp.i2 := sp.i1
a.i3 := {bp.i2+1}
b.i4 := {bp.i2+2}
retval.i0 := a.i3 + b.i4
function end1. Zakoduj i przetestuj prostą funkcję, np. silnię
2. Rozszerz kalkulator z poprzednich zajęć o funkcję generowania kodu czwórkowego
3. Dodaj instrukcje warunkowe, pętli,...