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