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 end
Wywoł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 end
1. 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,...