Pár příkladů:
Kód: Vybrat vše
=>.mls
d = 1.0;
e = 2.718;
f = 5e5;
=>.moa
Real constants
0: 1
1: 2.718
2: 1e-010
Kód: Vybrat vše
=>.mls
procedure localrealexpressions;
var
x, yy, z : real;
begin
x := d;
yy := e;
z := f;
...
=>.moa
LOCALREALEXPRESSIONS:
173: INITR
174: INITR
175: INITR
176: LDLITI LITINT[0]
177: CVRTIR
178: LSTR [1]
179: LDLITI LITINT[1]
180: CVRTIR
181: LSTR [2]
182: LDLITI LITINT[2]
183: CVRTIR
184: LSTR [3]
Kód: Vybrat vše
=>.mls
d3i( 'globalintegerexpressions', i-j+k, i+j*k, i+k div j);
=>.moa
GLOBALINTEGEREXPRESSIONS:
76: LDLITS LITSTR[3]
77: GLDI [0]
78: GLDI [1]
79: SUBI ->(i - j)
80: GLDI [2]
81: ADDI ->(i-j + k)
82: GLDI [0]
83: GLDI [1]
84: GLDI [2]
85: MULI
86: ADDI
87: GLDI [0]
88: GLDI [1]
89: GLDI [2]
90: DIVI
== pokud tedy mam i + k div j, tak postupuji nasledovne
== 1) ulozim i, k, j na zasobnik GLDI[x]
== 2) spoctu DIV
== 3) prictu to k i-cku
== Podle toho, co to vygenerovalo, to na zasobnik ulozi i j k (87, 88, 89), pak DIV (j div k) to pricte k i: (i+ j div k)
== Pokud se teda div nechova nejak jinak...
Co si o tom myslíte, máte podobný problém?