Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Pembentukan kode intermediate (contd) Skema transisi untuk Statement flow of control 1)S  if E then M 1 S 1 N else M 2 S 2 {backpatch(E.truelist, M 1.quad);

Presentasi serupa


Presentasi berjudul: "Pembentukan kode intermediate (contd) Skema transisi untuk Statement flow of control 1)S  if E then M 1 S 1 N else M 2 S 2 {backpatch(E.truelist, M 1.quad);"— Transcript presentasi:

1 Pembentukan kode intermediate (contd) Skema transisi untuk Statement flow of control 1)S  if E then M 1 S 1 N else M 2 S 2 {backpatch(E.truelist, M 1.quad); backpatch(E,falselist, M 2.quad); S.next := merge(S 1.nextlist, N.nextlist, S 2.nextlist)} 2)N  €{N.nextlist := makelist(nextquad); emit('goto--') 3)M  €{M.quad := nextquad}

2 4)S  if E then M S 1 {backpatch(E.truelist, M.quad) S.nextlist := merge(E.falselist, S 1.nextlist)} 5)S  while M 1 E do M 2 S 1 {backpath(S 1.nextlist, M 1.quad); backpath(E.truelist, M 2.quad); S.nextlist := E.falselist; emit('goto' M 1.quad)} 6) S  begin L end{S.nextlist := L.nextlist } 7) S  A{S.nextlist := makelist } 8) L  L 1 ; M S{backpath(L 1.nextlist, M.quad); L.nextlist := S.nextlist } 9) L  S{L.nextlist := S.nextlist }

3 Pembentukan kode intermediate (contd) A[dim A], misal ‘besarnya’ elemen dari A adalah w, maka elemen ke-I dari A dimulai pada lokasi base + (i-low) x w (*) Low = batas bawah subskrip array Base = address relatif dari storage yang dialokasikan untuk array (base adalah address relatif dari A[Low]).

4 Pembentukan kode intermediate (contd) Ekspresi (*) dapat diubah menjadi i x w + (base – low x w) c dapat dihitung pada waktu kompilasi dan disimpan dalam tabel simbol Jadi pada runtime A[i], addressnya dapat diperoleh dengan menambahkan i x w dengan c. Untuk dimensi >1 sebagian informasi array(c) juga datap disimpan di tabel simbol

5 Pembentukan kode intermediate (contd) Array dimensi 2 biasanya disimpan secara row-major(baris demi baris) atau colomn-major(kolom demi kolom). FORTRAN memakai colomn-major, Pascal memakai row- major. Jika dipakai row-major, address dari A[i 1,i 2 ] dapat dihitung dengan formula base + ((i 1 - low 1 ) x n 2 + i 2 – low 2 ) x w(+) Dimana low 1 adalah batas bawah dari i 1 low 2 adalah batas bawah dari i 2 n 2 = high 2 – low 2 + 1 high2 = batas atas dari i 2

6 Pembentukan kode intermediate (contd) (+) Bisa ditulis sebagai (( i 1 x n 2 ) x w + (base-((low 1 x n 2 ) +low 2 ) x w) dapat dihitung pada waktu kompilasi Secara umum, untuk dimensi k, A[i 1,i 2,i 3,…,i k ] dapat ditentukan address relatifnya sbb : ((…(i 1 n 1 + i 2 )n 3 + i 3 )…)n k + i k ) x w + base(…((low 1 n 2 + low 2 )n 3 + low 3 )…)n k + low k ) x w Dimana n j = high j – low j + 1,  j


Download ppt "Pembentukan kode intermediate (contd) Skema transisi untuk Statement flow of control 1)S  if E then M 1 S 1 N else M 2 S 2 {backpatch(E.truelist, M 1.quad);"

Presentasi serupa


Iklan oleh Google