Anda di halaman 1dari 22

MAKALAH TEKNIK KOMPILASI

Disusun Oleh :

ANGGI DIANA

41143034

JURUSAN TEKNIK INFORMATIKA


SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
(STMIK) IKMI CIREBON
2018
DAFTAR ISI

DAFTAR ISI .............................................................................................................................. 2


A. Masukan.............................................................................................................................. 3
B. Analisis Leksikal ................................................................................................................ 3
C. Analisis Sintaksis ................................................................................................................ 7
D. ANALISIS SEMANTIK .................................................................................................. 10
E. PENANGANAN KESALAHAN ..................................................................................... 11
F. PEMBANGKITAN KODE .............................................................................................. 12
G. Teknik Optimasi ............................................................................................................... 14
H. Keluaran............................................................................................................................ 19
I. Kesimpulan ....................................................................................................................... 20
Lampiran : ................................................................................................................................ 21
Menggunakan GCC untuk Unix ................................................................................... 21

2
A. Masukan

1. Assembler
Source code adalah bahasa assembly, Object code adalah bahasa mesin
*.asm –>assembler–>object code (*.exe/*.com)
2. Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa mesin atau
bahasa assembly. Source code dan data diproses berbeda
3. Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi hasil translasinya hanya
dalam bentuk internal, dimana program induk harus selalu ada-berbeda dengan
compiler

B. Analisis Leksikal

Analisis Leksikal merupakan antarmuka antara kode program sumber dan analisis
sintaktik (parser). Scanner melakukan pemeriksaan karakter per karakter pada teks
masukan, memecah sumber program menjadi bagian-bagian disebut Token.

Analisis Leksikal mengerjakan pengelompokkan urutan-urutan karakter ke dalam


komponen pokok: identifier, delimeter, simbol-simbol operator, angka, keyword, noise
word, blank, komentar, dan seterusnya menghasilkan suatu Token Leksikal yang akan
digunakan pada Analisis Sintaktik.

Model dasar untuk membentuk suatu Analisis Leksikal adalah Finite-State Automata.

2 aspek penting pembuatan Analisis Leksikal adalah:

- Menentukan token-token bahasa.

- Mengenali token-token bahasa dari program sumber.

Token-token dihasilkan dengan cara memisahkan program sumber tersebut dilewatkan ke


parser

Analisis Leksikal harus mengirim token ke parser. Untuk mengirim token, scanner harus
mengisolasi barisan karakter pada teks sumber yang merupakan 1 token valid. Scanner
juga menyingkirkan informasi seperti komentar, blank, batas-batas baris dan lain-lain
yang tidak penting (tidak mempunyai arti) bagi parsing dan Code Generator.

Scanner juga harus dapat mengidentifikasi token secara lengkap dan membedakan
keyword dan identifier. Untuk itu scanner memerlukan tabel simbol. Scanner
memasukkan identifier ke tabel simbol, memasukkan konstanta literal dan numerik ke
tabel simbol sendiri setelah konversi menjadi bentuk internal.

3
Analisis Leksikal merupakan komponen kompilasi independen yang berkomunikasi
dengan parser lewat antarmuka yang terdefinisi bagus dan sederhana sehingga
pemeliharaan analisis leksikal menjadi lebih mudah dimana perubahan-perubahan
terhadap analisis leksikal tidak berdampak pada pengubahan kompilator secara
keseluruhan.

Agar dapat memperoleh fitur ini, maka antarmuka harus tidak berubah. Kebanyakan kode
yang menyusun analisis leksikal adalah sama untuk seluruh kompilator, tidak peduli
bahasa.

Pada analisis leksikal yang dituntun tabel (table-driven lexical analyzer), maka satu-
satunya yang berubah adalah tabel itu sendiri.

Kadang diperlukan interaksi analisis leksikal dan analisis sintaktik yang lebih kompleks.
Sehingga analisis leksikal harus dapat menganggap string sebagai token bertipe, bukan
identifier.

Untuk itu perlu komunikasi tingkat lebih tinggi yang biasanya dilakukan suatu struktur
data dipakai bersama seperti tabel simbol.

Analisis Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi


sebagai Type atau typedef, sehingga analisis leksikal dapat memeriksa tabel simbol untuk
menentukan apakah lexeme adalah tipe token atau identifier.

Tugas-tugas Analisis leksikal

1. Konversi Program Sumber Menjadi Barisan Token Mengubah program sumber yang
dipandang sebagai barisan byte/karakter menjadi token

2. Menangani Kerumitan Sistem Masukkan/Keluaran Karena analisis leksikal biasanya


berhubungan langsung dengan kode sumber yang diwadahi file, maka analisis leksikal
juga bertindak sebagai benteng untuk komponen-komponen lain di kompilator dalam
mengatasi keanehan-keanehan sistem masukkan/keluaran sistem operasi dan sistem
komputer.

Optimasi perlu dilakukan agar analisis leksikal membaca karakter degan sekaligus
membaca sejumlah besar bagian file.

Perangkat masukkan/keluaran benar-benar diisolasi agar tidak terlihat oleh parser dan
komponen-komponen kompilator yang lain.

Tugas-tugas tambahan Analisis Leksikal

1. Penghilangan komentar dan whitespace (tab,spasi,karakter lainnya)


Tindakan housekeeping dilakukan scanner sehingga mengisolasikan dari parser dan
komponen-komponen kompilator lain.

4
2. Peran ini menyederhanakan perancangan parser (dan grammar bahasa
pemrograman).
Scanner juga mencatat nomor baris saat itu sehingga penanganan kesalahan yang
cerdas dapat mengirim pesan kesalahan dengan lebih akurat.
3. Konversi literal/konstanta numerik menjadi tipe data tertentu
Analisis leksikal dapat mengirim token, dan nilainya. Nilai ini biasa disebut
atribut.

Namun demikian, bila analisis leksikal ditambahin dengan tugas-tugas tambahan yang
terlalu banyak juga akan menjadi tidak baik. Karena itu membatasi analisis leksikal hanya
untuk melakukan tugas pengenalan pola token (ditambah membuang komentar) adalah
mempermudah pemeliharaan.

Tahap Pelaksanaan Analisis Leksikal

- Pada single one pass

Terjadi interaksi antara scanner dan parser. Sacnner dipanggil saat parser memerlukan
token berikutnya. Pendekatan ini lebih baik karena bentuk internal program sumber yang
lengkap tidak perlu dibangun dan disimpan di memori sebelum parsing dimulai.

- Pada separate pass

Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner disimpan
dalam file. Dari file tersebut, parsing melakukan kegiatannya.

Scanner mengirim nilai-nilai integer yang mempresentasikan bentuk internal token, bukan
nilai-nilai string.

Keunggulan cara ini adalah ukurannya kecil dan tetap. Parser sangat lebih efisien bekerja
dengan nilai integer yang mempresentasikan simbol daripada string nyata dengan panjang
variabel.

Implementasi Analisis Leksikal

1. Pengenalan Token

- Scanner harus dapat mengenali token

- Terlebih dahulu dideskripsikan token-token yang harus dikenali

2. Pendeskripsian Token

- Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-


token dengan kelemahan reguler grammar menspesifikasikan token berbentuk
pembangkit, sedang scanner perlu bentuk pengenalan.

- Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi


reguler.

5
- Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor
(FSA) atau finite automata.

3. Implementasi Analisis Leksikal sebagai Finite Automata Pada pemodelan analisis


leksikal sebagai pengenal yang menerapkan finite automata, analisis leksikal tidak cuma
hanya melakukan mengatakan YA atau TIDAK. Dengan demikian selain pengenal, maka
analisis leksikal juga melakukan aksi-aksi tambahan yang diasosiasikan dengan string
yangsedang diolah.

Analisis leksikal dapat dibangun dengan menumpangkan pada konsep pengenal yang
berupa finite automata dengan cara menspesifikasikan rutin-rutin (aksi-aksi) tertentu
terhadap string yang sedang dikenali.

4. Penanganan Kesalahan di Analisis Leksikal Hanya sedikit kesalahan yang


diidentifikasi di analisis leksikal secara mandiri karena analisis leksikal benar-benar
merupakan pandangan sangat lokal terhadap program sumber. Bila ditemui situasi dimana
analisis leksikal tidak mampu melanjutkan proses karena tidak ada pola token yang
cocok, maka terdapat beragam alternatif pemulihan. yaitu: \

- "Panic mode" dengan menghapus karakter-karakter berikutnya sampai analisis leksikal


menemukan token yang terdefinisi bagus

- Menyisipkan karakter yang hilang

- Mengganti karakter yang salah dengan karakter yang benar

- Mentransposisikan 2 karakter yang bersebelahan.

Salah satu cara untuk menemukan kesalahan-kesalahan di program adalah menghitung


jumlah transformasi kesalahan minimum yang diperlukan untuk mentransformasikan
program yang salah menjadi program yag secara sintaks benar.

Input Buffering Perancangan analisis leksikal seharusnya dapat membuat buffering


masukkan yang membantu mempercepat proses pembacaan dari file serta mempunyai
fleksibelitas yang tinggi agar analisis leksikal tidak bergantung platform sehingga
mempunyai portabilitas yang tinggi.

6
Berikut adalah analisis leksikal dari program sederhana java di atas :

Source code :

package latihan;

public class tugas {

public static void main(String[ ] args) {

System.out.println("Hello, World");

Token:

latihan, tugas merupakan identifiers

Package, public, class, static, void, main, String, args, System.out.println merupakan
keywords

Hello, World merupakan literals

“{“, “}”, “[“,”]”, “(“, “)”, “;” merupakan punctuation

C. Analisis Sintaksis

Analisis sintak lebih sering disebut penguraian (parsing). Tujuan utama dari analisis
sintak adalah memeriksa apakah urutan token-token yang dihasilkan sesuai dengan tata
bahasa dari bahasa yang bersangkutan. Misalnya bahasa C mengenal kalimat: jumlah++;
yang berarti menaikkan harga variabel jumlah dengan angka satu. Tetapi kalimat di atas
akan salah jika dikompilasi dengan kompilator bahasa Pascal, karena tidak sesuai
dengan tata bahasa Pascal.

Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak
suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini
memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-
terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang
disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya
kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal

7
merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-
terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan
sederetan himpunan non terminal dan terminal yang berada dalam sisi kanan
produksnya. Proses ini disebut sebagai derivasi. Contohnya non-terminal if_stmt
merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang
membentuk aturan produksi : if_stmt ?? if expr then stmt else stmt. Dari semua simbol
non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal,
yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana
kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg
bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis
leksikal dibentuk menjadi pohon urai (parse tree).

Pohon urai merupakan hasil derivasi dari aturan – aturan produksi. Ada dua jenis
derivasi, yaitu derivasi terkiri (Left Most Derivation) dan derivasi terkanan (Right Most
Derivation). Derivasi terkiri akan menderivasi suatu aturan produksi mulai dari non-
terminal yang paling kiri. Sedangkan derivasi terkanan akan menderivasi suatu aturan
produksi mulai dari non-terminal yang paling kanan.

Jika proses derivasi aturan-aturan produksi suatu tata bahasa terhadap suatu masukan
menghasilkan lebih dari satu pohon urai maka tata bahasa tersebut dikatakan rancu
(ambiguous).

8
9
D. ANALISIS SEMANTIK
Analisis Semantik adalah proses setelah melewati proses scanning dan parsing. Pada
tahap ini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa
kesesuaiannya dengan komponen program yang ada. Secara global, fungsi dari semantic
analyzer adalah untuk menentukan makna dari serangkaian instruksi yang terdapat dalam
program sumber.

Contoh : A := (A + B)*(C + D)

maka penganalisis semantik harus mampu menentukan aksi apa yang akan dilakukan
oleh operator-operator tersebut. Dalam sebuah proses kompilasi, andaikata parser
menjumpai ekspresi seperti diatas, parser hanya akan mengenali simbol-simbol ':=' , '+' ,
dan '*'. Parser tidak tahu makna apa yang tersimpan dibalik simbol simbol tersebut.
Untuk mengenalinya, kompiler akan memanggil rutin semantik yang akan memeriksa :

 Apakah variabel-variabel yang ada telah didefinisikan sebelumnya?


 Apakah variabel-variabel tersebut tipenya sama?
 Apakah operand yang akan dioperasikan tersebut ada nilainya?, dan seterusnya.

Fungsi ini terkait dengan tabel simbol. Pengecekan yang dilakukan oleh analisis
semantik adalah sebagai berikut :

a) Memeriksa keberlakuan nama-nama meliputi pemeriksaan berikut.


 Duplikasi : pada tahap ini dilakukan pengecekan apakah sebuah nama terjadi
pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bagian pengelola blok.
 Terdefinisi : Melakukan pengecekan apakah sebuah nama yang dipakai pada tubuh
program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali
blok.
b) Memeriksa tipe. Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-
statement yang ada. Misalkan bila terdapat suatu operasi, diperiksa tipe operand.
Contohnya bila ekspresi yang mengikuti instruksi IF berarti tipenya boolean, akan
diperiksa tipe identifier dan tipe ekspresi. Bila ada operasi antara dua operand, maka tipe

10
operand pertama harus bisa dioperasikan dengan operand kedua.

Analisa semantik sering juga digabungkan pada pembangkitan kode antara yang
menghasilkan Output intermediate code, yang nantinya akan digunakan pada proses
kompilasi berikutnya.

E. PENANGANAN KESALAHAN
Kesalahan Program bisa merupakan :

1. Kesalahan Leksikal : THEN ditulis TEN


2. Kesalahan Sintaks : A:=X+(B*(C+D) {jumlah kurungnya kurang}
3. Kesalahan Semantik :
 Tipe data yang salah.
Contoh : Var Siswa : Integer

Siswa := 'Yanuar' {tipe string}

 Variabel belum didefinisikan.


Contoh : B := B + 1 {B belum didefinisikan}

Langkah-langkah Penanganan Kesalahan adalah sebagai berikut :

 Mendeteksi Kesalahan
 Melaporkan Kesalahan
 Tindak lanjut pemulihan/perbaikan

sebuah kompilator yang menemukan kesalahan akan melakukan pelaporan kesalahan,


yang biasanya meliputi :

 Kode kesalahan
 Pesan kesalahan dalam bahasa natural
 Nama dan atribut identifier
 Tipe-tipe yang terkait bila type checking

11
Contoh : Error Massage: Error 162 Jumlah := unknown identifier

artinya :

 kode kesalahan = 162


 pesan kesalahan = unknown identifier
 nama identifier = Jumlah

Adanya pesan kesalahan tersebut akan memudahkan pemrogram dalam mencari dan
mengoreksi sumber dari kesalahan.

F. PEMBANGKITAN KODE
Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code
generator). Disini kode antara dari program biasanya ditranslasikan ke bahasa assembly
atau bahasa mesin.

Contoh :

(A+B)*(C+D)

Notasi Kuadrupel :

1. +, A, B, T1
2. +, C, D, T2
3. *, T1, T2, T3

Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator tunggal :

LDA A {Muat isi A ke akumulator}

ADD B {Tambahkan isi akumulator dengan B}

12
STO T1 {Simpan isi akumulator ke T1}

LDA C

ADD D

STO T2

LDA T1

MUL T2

STO T3

Keluaran dari code generator akan diterima oleh code optimizer. Misalkan untuk kode
assembly diatas bisa dioptimasi menjadi :

LDA A

ADD B

STO T1

LDA C

ADD D

MUL T1

STO T2

Notes :

 Perintah LDA : Memuat isi dari register/memory ke akumulator (load to


accumulator)
 Perintah STO : Menyimpan isi akumulator ke register/memory (store from
accumulator)

13
G. Teknik Optimasi
Bertujuan menghasilkan kode program dengan ukuran yang lebih kecil, sehingga
lebih cepat eksekusinya. Berdasarkan ketergantungan pada mesin :

 Machine Dependent Optimizer


Kode dioptimasi sehingga lebih efisien pad mesin tertentu. Optimasi ini memerlukan
informasi mengenai feature yang ada pada mesin tujuan dan mengambil keuntungan
darinya untuk menghasilkan kode yang lebih pendek atau dieksekusi lebih cepat.

 Machine Independent Optimizer


Strategi optimasi yang bisa diaplikasikan tanpa tergantung pada mesin tujuan tempat
kode yang dihasilkan akan dieksekusi nantinya. Mesin ini meliputi optimasi lokal dan
optimasi global.

1.1 Optimasi Lokal

optimasi yang dilakukan hanya pada suatu blok dari source code, dengan cara :

1. Folding

Nilai konstanta atau ekspresi yang bisa dievaluasi pada saat compile time diganti
dengan nilai komputasinya.

Contoh instruksi :

A:=2+3+B

14
diganti menjadi

A:=5+B

2. Redundant – Subexpression Elimination

Menggunakan hasil komputasi terdahulu daripada melakukan komputasi ulang.

Contoh urutan instruksi :

A:=B+C

X:=Y+B+C

B+C redundan, bisa memanfaatkan hasil komputasi sebelumnya, selama tidak ada
perubahan nilai pada variabel.

3. Optimasi dalam sebuah iterasi

 Loop Unrolling : menggantikan suatu loop dengan menulis statement dalam loop
beberapa kali. Hal ini didasari pemikiran, sebuah iterasi pada implementasi level
rendah akan memerlukan operasi sebagai berikut.
 Inisialisasi / pemberian nilai awal pada variabel loop. Dilakukan sekali pada
saat permulaan eksekusi loop.
 Pengujian, apakah variabel loop telah mencapai kondisi terminasi.
 Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop
dengan jumlah tertentu.
 Operasi yang terjadi pada tubuh perulangan (loop body).
Dalam setiap perulangan akan terjadi pengujian dan adjusment yang menambah
waktu eksekusi.

Contoh instruksi :

FOR I:=1 to 2 DO

A[I]:=0;

dioptimasi menjadi

15
A[1] := 0;

A[2] := 0;

Pada instruksi pertama yang menggunakan iterasi perlu dilakukan inisialisasi


setiap eksekusi loop, pengetesan, adjustment, dan operasi pada tubuh perulangan.
Yang kesemuanya itu menghasilkan banyak instruksi. Karena itu dengan optimasi
hanya memerlukan dua instruksi assignment.

 Frequency Reduction : memindahkan statement ke tempat yang lebih jarang


dieksekusi.
Contoh instruksi :

FOR I:=1 TO 10 DO

BEGIN

X:=5;

A:=A+1;

END;

variabel X dapat dikeluarkan dari iterasi, menjadi :

X:=5;

FOR I:=1 TO 10 DO

BEGIN

A:=A+1

END;

4. Strength Reduction

Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat dieksekusi.

Contoh :

16
pada beberapa komputer operasi perkalian memerlukan waktu lebih banyak untuk
dieksekusi dari pada operasi penjumlahan, maka penghematan waktu bisa dilakukan
dengan mengganti operasi perkalian tertentu dengan penjumlahan. Contoh lain :

A := A + 1

Dapat digantikan dengan

INC(A)

1.2 Optimasi Global

Dilakukan dengan analisis flow, yaitu suatu graph berarah yang menunjukkan
jalur yang mungkin selama eksekusi program. Ada 2 kegunaan optimasi global, yaitu bagi
para programmer dan untuk compiler itu sendiri.

 Bagi Programmer
 Unreachable / dead code : Kode yang tidak pernah dieksekusi
Misal :

X := 5;

IF X = 0 THEN

A := A + 1

Instruksi

A := A + 1

Tidak pernah dikerjakan karena kondisi X tidak pernah menjadi 0, sehingga


memperlambat proses.

 Unused parameter : parameter yang tidak pernah digunakan dalam prosedur


Misal :

Procedure penjumlahan(a,b,c; Integer);

Var x : integer;

17
Begin

x := a + b;

End

Parameter c tidak pernah digunakan sehingga tidak perlu diikutsertakan


dikarenakan pada prosedur penjumlahan c tidak pernah dikenakan suatu proses
atau nilai

 Unused variable : variabel yang tidak pernah digunakan dalam program.


Misal :

Var a,b : Integer;

Begin

a := 5;

end;

Variabel b tidak pernah digunakan dalam manipulasi, sehingga tidak perlu


dideklarasikan

 Variable : variabel yang dipakai tanpa nilai awal


Misal :

Var a,b : Integer;

Begin

a := 5;

a := a + b;

end;

Variabel b digunakan tetapi tidak memiliki harga awal

 Bagi Compiler
 Meningkatkan efisiensi eksekusi program
Menghilangkan useless code / kode yang tidak terpakai

18
H. Keluaran
Source code :

package latihan;

public class tugas {

public static void main(String[ ] args) {

System.out.println("Hello, World");

Token:

latihan, tugas merupakan identifiers

Package, public, class, static, void, main, String, args, System.out.println merupakan
keywords

Hello, World merupakan literals

“{“, “}”, “[“,”]”, “(“, “)”, “;” merupakan punctuation

19
I. Kesimpulan
Kelebihan:

 Pengeksekusian program cepat, karena kode yang dihasilkan berupa kode biner.
 Dapat langsung diterjemahkan sendiri.
 Bisa dioptimalisasikan.
 Dapat bekerja di berbagai jenis komputer.

Kekurangan:

 Memerlukan waktu yang lama untuk menganalisa dan memproses program.


 Pembuatan kode di bagi menjadi 2 tahap, sehingga prosesnya lebih lama.
 Bergantung pada linker, jika linker hilang program yang dihasilkan tidak dapat
berjalan.
 Tidak cocok untuk membuat program-program kecil.

20
Lampiran :
Menggunakan GCC untuk Unix
1. Bukalah jendela Terminal di komputer Unix Anda.

2. Masukkan perintah gc c -- ve r si on dan tekan ⌅ Enter untuk menampilkan versi GCC


pada komputer. Jika komputer menampilkan pesan command not found, GCC mungkin
belum terpasang di komputer Anda.[1]

 Jika diperlukan, pasang GCC dengan mengikuti panduan untuk distribusi Linux Anda.
 Untuk mengompilasi program C++, gunakan "g++", alih-alih "gcc".
3. Bukalah folder tempat Anda menyimpan kode sumber program.

 Misalnya, jika kode program "akurapopo.c" berada di folder /usr/yuliaR/source,


masukkan perintah c d /usr/ yul i a R/sou rc e .

21
4. Masukkan perintah gc c a kur a popo. c –o A ku Ra popo . Gantikan “akurapopo.c”
dengan nama kode sumber program Anda, dan "AkuRapopo" dengan nama program yang
Anda inginkan. Proses kompilasi akan dimulai.
 Jika terjadi galat pada proses kompilasi, kumpulkan informasi galat dengan
perintah gc c -Wa l l -o e rrorl og a kura popo.c . Setelah itu, tampilkan berkas
"errorlog" dengan perintah ca t e rrorl og.
 Lakukan kompilasi program dari beberapa berkas kode sumber dengan perintah gc c -
o na m a progra m be rka s1.c be rka s2.c be rka s3.c .
 Untuk mengompilasi banyak program dari banyak kode sumber sekaligus, gunakan
perintah gc c -c be rka s1.c be rka s2.c be rka s3.c .

5. Jalankan program yang telah dikompilasi dengan perintah ./namaprogram.

22

Anda mungkin juga menyukai