Tugas Individu Teknik Kompilasi (E)

 Nama : Amelia Halawati (202031015)


Menjawab Soal Level 2 Nomor 14 dan 15 

Nomor 14. 
Salah satu peran pengurai dalam teknik kompilasi adalah mengatasi kesalahan sintak. Jelaskan 4 strategi dalam pemilihan kesalahan tersebut! 

Jawaban : Teknik pemadatan table pada kompilasi biasanya dilakukan untuk mengurangi ukuran atau ukuran memori yang digunakan oleh tabel dalam program. Pemadatan ini dapat membantu meningkatkan kinerja dan efisiensi program.

Berikut adalah beberapa teknik pemadatan tabel yang umum digunakan dalam kompilasi:

1. Penghapusan entri yang tidak digunakan: Dalam tabel, terkadang terdapat entri yang tidak digunakan atau tidak perlu. Pemadatan dapat dilakukan dengan menghapus entri-entri tersebut untuk mengurangi ukuran tabel.

2. Penggabungan entri yang sama: Jika terdapat entri yang memiliki nilai yang sama, entri-entri tersebut dapat digabungkan menjadi satu entri tunggal. Dengan demikian, ukuran tabel dapat dikurangi tanpa kehilangan informasi.

3. Kompresi data: Teknik kompresi data dapat digunakan untuk mengurangi ukuran tabel dengan menghilangkan redundansi dalam data. Ada berbagai algoritma kompresi yang dapat digunakan, seperti algoritma Huffman atau algoritma LZ77.

4. Penggunaan struktur data yang lebih efisien: Kadang-kadang, penggunaan struktur data yang lebih efisien dapat mengurangi ukuran tabel. Misalnya, jika tabel awalnya diimplementasikan sebagai array dua dimensi, maka dengan menggunakan struktur data seperti matriks sparse atau hash table, ukuran tabel dapat dikurangi.

5. Pemadatan kode instruksi: Pada level instruksi, teknik pemadatan dapat dilakukan dengan menggabungkan beberapa instruksi menjadi satu instruksi tunggal atau mengoptimalkan urutan instruksi untuk mengurangi jumlah instruksi yang diperlukan.

Nomor 15. 
Apa saja metode yang dipakai untuk mengirimkan parameter? Jelaskan masing-masing metode tersebut dalam suatu studi kasus! 

Jawaban :

1. Call by values

Passing by value merupakan pengiriman parameter yang dilakukan dengan meng-copy-kan value dari actual parameter (dari pemanggil/caller) ke formal parameter (function). Perubahan yang terjadi di dalam function tidak akan mempengaruhi nilai asli pemanggilnya.

Perhatikan contoh di bawah ini, dimana program dibuat dalam Bahasa pemrograman C:


dari contoh di atas, kita melakukan pengiriman (passing) parameter berupa nilai dari x. 
3.ePada contoh di atas ini, dibuat sebuah fungsi swapyang menerima 2 parameter  yakni int a, dan int b, dan bertujuan untuk menukar isi dari a dan b.

Bila kita jalankan program ini, maka output program adalah: “x = 7 dan y = 10”.

Hal ini terjadi dikarenakan perubahan nilai hanya terjadi di dalam fungsi swap. Dimana bila kita mencetak data a dan b di sana, nilai memang benar sudah terganti. Namun dikarenakan kita mengirimkan copy value dari nilai tersebut, maka tidak mempengaruhi x dan y dari sisi pemanggil.

2. Call by references 

Call by Reference merupakan metode untuk mempassing paramater ke dalam fungsi. Yang membedakan dengan Call by Value ialah, pada "Call by Reference", 
kita memberikan alamat dari variabel yang ingin kita berikan ke si fungsi untuk diproses. 

Dalam passing by reference, actual parameter yang kita kirimkan adalah alamat memori (memory address dari variable yang diinginkan), dan formal parameternya merupakan pointer yang menunjuk ke alamat memori tersebut. Dengan demikian perubahan yang dilakukan akan mempengaruhi nilai pada alamat yang ditunjuk (yakni alamat x dan y yang merupakan pemanggilnya).

Contoh Program : 

Dari contoh program diatas dapat dijelaskan bahwa variabel yang dideklarasikan 'a' di referensi/menunjuk ke variabel 'a' di main(). Di sini nama variabel berbeda, tetapi keduanya menunjuk/merujuk ke lokasi alamat memori yang sama.

3. Call by restore

Call by restore (juga dikenal sebagai call by value result) adalah penggabungan call by value dan call by result. Parameter formal bertindak sebagai variabel lokal yang diinisialisasi ke nilai parameter aktual. Di dalam rutin, perubahan parameter formal hanya memengaruhi salinan lokal. Saat kembali dari rutin, nilai akhir dari parameter formal ditetapkan ke parameter aktual. Call by restore didukung oleh Ada untuk mencapai operasi parameter "in-out". Ini memiliki kelemahan yang sama dengan yang terkait dengan panggilan berdasarkan nilai.

4. Call by name

Call-by-name mirip dengan call-by-reference karena Anda dapat mengubah nilai parameter yang diteruskan. Ini berbeda dari call-by-reference karena parameter tidak dievaluasi sebelum prosedur dipanggil tetapi malah dievaluasi dengan malas. Artinya, dievaluasi kapan dan hanya ketika parameter benar-benar digunakan.

Sebagai contoh, misalkan kita memiliki prosedur f(x, y) dan kita meneruskannya ke i dan i/2 dimana i awalnya sama dengan 10. Jika f menetapkan x ke 42 dan kemudian mengevaluasi y maka akan terlihat nilai 21 (sedangkan dengan panggilan dengan referensi atau panggilan dengan nilai masih akan melihat 5). Ini karena ekspresi i/2 tidak dievaluasi sampai y dievaluasi.

Dalam banyak hal ini tampaknya berperilaku seperti substitusi teks literal dari parameter (dengan penggantian nama untuk menghindari konflik nama). Namun dalam praktiknya, ini diimplementasikan menggunakan "thunks" (pada dasarnya penutupan) untuk ekspresi yang diteruskan.

5. Pengembangan Makro 

Makro merupakan kependekan dari suatu bagian program yang lebih panjang memungkinkan penulis program untuk memperpendek program yang ditulisnya. 

Dalam hal ini perlu dilakukan dua hal yaitu:
1. Mendefinisikan makro yang digunakan
    parameter yang didefinisikan pada makro disebut dengan parameter formal 
2. Melakukan pemanggilan makro yang mungkin juga mengundang beberapa parameter. sedangkan parameter yang digunakan untuk memanggil makro disebut dengan parameter aktual. 
  

4. Call by name

5. Pengembangan makro4 metode pengirima
1. Call by values
2. Call by references
3. Call by restore
4. Call by name
5. Pengembangan makro


Komentar

Postingan populer dari blog ini

Matriks

Rangkaian Listrik Pasif dan Aktif