Selasa, 20 Juni 2023

Nadila Danti Lestari - Menjawab Level 2 Nomor 14 dan 15

 Nama : Nadila Danti Lestari

NIM    : 202031038

Kelas    : G

Mata kuliah : Teknik Kompilasi


Menjawab soal level 2 pada nomor 14 dan 15 

14. Apa saja metode yang dipakai untuk mengirimkan parameter pada teknik kompilasi, jelaskan masing-masing metode tersebut dengan studi kasus

Jawab:

Dalam konteks teknik kompilasi, terdapat beberapa metode yang digunakan untuk mengirimkan parameter antara pemanggilan dan pemanggil fungsi. Berikut ini adalah beberapa metode yang umum digunakan:

1. Penyampaian dengan Nilai (Pass-by-Value):

   Metode ini mengirimkan nilai parameter ke fungsi pemanggil dengan menyalin nilainya ke dalam lokasi memori yang baru. Dalam hal ini, perubahan pada parameter dalam fungsi pemanggil tidak akan mempengaruhi nilai asli parameter di luar fungsi.

   Contoh:

   ```

   void changeValue(int x) {

       x = 10;

   }

   int main() {

       int num = 5;

       changeValue(num);

       // Nilai num tetap 5 karena metode pass-by-value

       return 0;

   }

   ```

2. Penyampaian dengan Referensi (Pass-by-Reference):

Metode ini mengirimkan referensi atau alamat dari parameter ke fungsi pemanggil. Dengan demikian, perubahan pada parameter dalam fungsi akan mempengaruhi nilai asli parameter di luar fungsi.

   Contoh:

   ```

   void changeValue(int& x) {

       x = 10;

   }

  

   int main() {

       int num = 5;

       changeValue(num);

       // Nilai num berubah menjadi 10 karena metode pass-by-reference

       return 0;

   }

   ```

3. Penyampaian dengan Pointer (Pass-by-Pointer):

Metode ini mengirimkan pointer yang berisi alamat dari parameter ke fungsi pemanggil. Dalam fungsi, parameter dapat diakses melalui dereferensi pointer, dan perubahan pada parameter akan mempengaruhi nilai asli parameter di luar fungsi.

   Contoh:

   ```

   void changeValue(int* x) {

       *x = 10;

   }

   

   int main() {

       int num = 5;

       changeValue(&num);

       // Nilai num berubah menjadi 10 karena metode pass-by-pointer

       return 0;

   }

   ```

Metode yang digunakan untuk mengirimkan parameter bergantung pada bahasa pemrograman yang digenean dan kebutuhan spesifik dari program yang dikembangkan.Sebagai tambahan, berikut adalah beberapa metode tambahan yang dapat digunakan dalam beberapa bahasa pemrograman:

4. Penyampaian dengan Nilai-Konstan (Pass-by-Value/Pass-by-Value-Constant):

   Metode ini mirip dengan penyampaian dengan nilai, tetapi digunakan khusus untuk parameter konstan yang tidak dapat diubah dalam fungsi. Ini memastikan bahwa parameter konstan tetap tidak dapat diubah di dalam fungsi.

   Contoh (C++):

   ```

   void printValue(const int x) {

       // x tidak dapat diubah di dalam fungsi

       cout << x << endl;

   }

  

   int main() {

       int num = 5;

       printValue(num);

       return 0;

   }

   ```

5. Penyampaian dengan Nilai Default (Default Parameter Value):

   Metode ini memungkinkan penggunaan nilai default untuk parameter jika tidak ada nilai yang diberikan saat pemanggilan fungsi. Hal ini membantu menghindari kesalahan saat memanggil fungsi dengan jumlah argumen yang kurang.

   Contoh (Python):

   ```

   def greet(name="Anonymous"):

       print("Hello, " + name + "!")

  

   greet()  # Output: Hello, Anonymous!

   greet("John")  # Output: Hello, John!

   ```

6. Penyampaian dengan Jumlah Variabel (Variable Arguments):

   Metode ini memungkinkan fungsi menerima jumlah variabel parameter yang tidak pasti. Dalam beberapa bahasa pemrograman, seperti C/C++, dapat digunakan variabel argumen (variadic arguments) dan manipulasi berdasarkan list atau array.

   Contoh (C++):

   ```

   #include <iostream>

   #include <cstdarg>

  

   int sum(int count, ...) {

       va_list args;

       va_start(args, count);

  

       int total = 0;

       for (int i = 0; i < count; i++) {

           int num = va_arg(args, int);

           total += num;

       }

  

       va_end(args);

       return total;

   }

  

   int main() {

       int result = sum(4, 1, 2, 3, 4);

       std::cout << result << std::endl;  // Output: 10

       return 0;

   }

   ```

Metode-metode ini merupakan contoh umum yang digunakan dalam berbagai bahasa pemrograman. Namun, ada perbedaan dalam implementasi dan istilah yang digunakan tergantung pada bahasa pemrograman yang digunakan.


15. Salah satu peran pengurai dalam teknik kompilasi adalah mengatasi kesalahan syntax, jelaskan 4 strategi dalam pemulihan kesalahan tersebut!

Jawab:

Dalam teknik kompilasi, pengurai (parser) memiliki peran penting dalam mengatasi kesalahan syntax atau kesalahan dalam struktur gramatikal program. Ketika parser menemui kesalahan syntax, beberapa strategi pemulihan kesalahan dapat diterapkan. Berikut adalah empat strategi umum yang digunakan:

1. Pemulihan Kesalahan dengan Melewatkan Token (Token Skipping):

   Strategi ini melibatkan pengabaian token yang menyebabkan kesalahan dan melanjutkan proses parsing dengan token berikutnya. Parser akan mencoba menemukan titik yang tepat untuk melanjutkan analisis sintaksis, berdasarkan informasi yang tersedia dalam tabel gramatikal atau aturan bahasa.

   Contoh:

   ```

   if (condition)

       // Kode yang valid di sini

   else

       // Kode yang valid di sini

 

   // Kesalahan: Tidak ada token "else" setelah "if" tanpa blok kode

   ```

2. Pemulihan Kesalahan dengan Penyisipan Token (Token Insertion):

   Strategi ini melibatkan penyisipan token yang hilang atau salah ke dalam struktur syntax yang tidak valid. Pemulihan ini memungkinkan parser melanjutkan analisis dengan harapan menemukan struktur yang valid di sekitarnya.

 Contoh:

   ```

   if (condition)

       // Kode yang valid di sini

   else

       // Kode yang valid di sini

 

   // Kesalahan: Kurang kurung kurawal "{" setelah "else"

   ```

3. Pemulihan Kesalahan dengan Penggantian Token (Token Replacement):

   Strategi ini melibatkan penggantian token yang salah dengan token yang benar. Parser mencoba mengenali token yang benar yang akan menghasilkan struktur syntax yang valid.

   Contoh:

   ```

   for (int i = 0; i < 10; i++)

       // Kode yang valid di sini

 

   // Kesalahan: "fro" sebagai kesalahan ketik untuk "for"

   ```

4. Pemulihan Kesalahan dengan Hapus Token (Token Deletion):

   Strategi ini melibatkan penghapusan token yang salah atau ekstra yang mengakibatkan kesalahan syntax. Dengan menghapus token yang tidak valid, parser dapat melanjutkan analisis dengan harapan menemukan struktur yang valid di sekitarnya.

   Contoh:

   ```

   while (condition)

       // Kode yang valid di sini

 

   // Kesalahan: Kurang tanda kurung ")" setelah "condition"

   ```

Pilihan strategi pemulihan kesalahan dapat bervariasi tergantung pada bahasa pemrograman dan implementasi pengurai yang digunakan. Tujuan dari pemulihan kesalahan syntax adalah untuk memberikan umpan balik yang berguna kepada pengembang dalam menemukan dan memperbaiki kesalahan dalam kode sumber.

 

Tidak ada komentar:

Posting Komentar

Nadila Danti Lestari - Menjawab Level 2 Nomor 14 dan 15

 Nama : Nadila Danti Lestari NIM     : 202031038 Kelas     : G Mata kuliah : Teknik Kompilasi Menjawab soal level 2 pada nomor 14 dan 15  14...