Jumat, 15 April 2011

ANALISA INPUT PROGRAM SUMBER

ANALISA INPUT PROGRAM SUMBER

Program sumber dilihat oleh translator sebagai suatu kumpulan urutan simbol yang todak berbeda dengan panjang dari ribuan, bahkan sampai ratusan ribu karakter. Suatu bentuk subprogram, ataupun statemen yang diatur rapi oleh programmer, tidak akan terlihat oleh translator.
a.    Analisa Lexical
Merupakan tahap dasar dari suatu kompilasi yang membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter dikelompokkan menajadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber. Analisa lexical mengerjakan pengelompokan urutan karakter ke dalam komponen pokok: identifier, delimiter, simbol operator, angka, keyword, noise word, blank, komentar, dan seterusnya. Pengelompokan ini akan menghasilkan lexical token (lexeme) yang akan digunakan pada tingkatan selanjutnya. Setiap token yang dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token).
Contoh : Misalnya pola token untuk identifier I adalah
           I à huruf(huruf|angka)
           Lexeme ab2c dikenali sebagai token sementara, sedangkan lexeme 2abc atau abC tidak dikenal.

b.    Analisa Syntactic
Tahap kedua dari kompilasi adalah analisa syntactic atau sering disebut parsing. Disinilah struktur program yang lebih besar diidentifikasi (statemen, deklarasi, ekspresi, dan lainnya) menggunakan lexical token yang dihasilkan oleh lexical analyzer. Tahap ini memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber. Deretan token yang tidak sesuai aturan sintaks akan dilaporkan sebagai kesalahan sintaks (syntax error). Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse tree). Analisa syntactic selalu bekerja bergantian dengan analisa semantic. Pertama, syntactic analyzer mengidentifikasikan urutan lexical token seperti ekspresi, statemen, subprogram, dan lainnya. Semantic analyzer kemudian dipanggil untuk memproses unit ini.
Contoh : Misalnya sintaks untuk ekspresi if-then E adalah
           E à if L then
           L à IOA
           I à huruf(huruf|angka)
           O à <|=|>|<= | >=
           A à 0 | 1 | … | 9
           Ekspresi if a2 < 9 then adalah ekspresi sesuai sintaks, sementara ekspresi if then a2B < 9 atau if a2 < 9 do tidak sesuai. Perhatikan bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
          
c.     Analisa Semantic
Merupakan pusat dari tahapan kompilasi. Disini, struktur syntactic yang dikenali oleh syntactic analyzer diproses, dan struktur objek executable sudah mulai dibentuk. Analisa semantic kemudian menjadi jembatan antar analysis dan synthesis dari kompilasi.
Analyzer semantic menghasilkan suatu kode objek yang executable dalam kompilasi yang sederhana, tetapi biasanya bentuk dari kode objek yang executable ini merupakan bentuk internal dari final program executable, yang kemudian dimanipulasi oleh tahap optimisasi dari translator sebelum akhirnya kode executable benar-benar dihasilkan.
Tahap ini memeriksa token dan ekspresi dengan acuan batasan-batasan yang ditetapkan, misalnya:
(a) Panjang maksimum token identifier adalah 8 karakter,
(b) Panjang maksimum ekspresi tunggal adalah 80 karakter,
(c)  Nilai bilangan bulat adalah –32768 s/d 32767,
(d) Operasi aritmatika harus melibatkan operan-operan yang bertipe sama.

Pada tahap ini, muncul pula fungsi-fungsi tambahan yang penting lainnya, yaitu:
·         Symbol-table Maintenance
Symbol-table merupakan salah satu pusat struktur data di setiap translator. Symbol-table biasanya berisi suatu masukan untuk setiap identifier yang berbeda yang ditemukan diprogram sumber. Symbol-table berisi sesuatu yang lebih dari identifier itu sendiri karena berisi data tambahan tentang atribut identifier tersebut: jenisnya (misal varibel sederhana, nama array, nama subprogram, parameter formal, dan lainnya), jenis nilai (integer, riil, dan lainnya), lingkungan referensi, dan informasi lain yang didapat dari program input sampai dengan deklarasi dan penggunaan.
·         Penyisipan Implisit Information
Seringkali informasi bersifat implisit yang harus dibuat eksplisit di program objek yang berlevel lebih rendah.kebanyakan informasi yang implisit ini berada dalam aturan default. Interpretasi digunakan ketika programmer tidak memberikan spesifikasi yang eksplisit.
·         Pendeteksi Error
Syntactic dan semantic analyzer harus dipersiapkan untuk dapat menangani dengan baik program yang tidak benar seperti halnya menangani program yang benar. Error yang umum terjadi adalah salah ketik (misalnya ada delimiter ditengah statemen, deklarsi yang ada ditengah statemen, dan lainnya), penggunaan variabel riil di variabel integer, penggunaan array dua dimensi yang diisi dengan array tiga dimensi, dan lainnya.
Semantic analyzer tidak hanya mengenali error “umum” yang muncul dan memunculkan pesan error yang tepat, tetapi juga menentukan cara yang tepat untuk melanjutkan dengan analisa syntactic pada sisa program.
·         Macro Processing
Macro merupakan bagian dari teks program yang didefinisikan secara terpisah dan disisipkan ke dalam program pada waktu translasi ketika ada macro call di program sumber. Dengan demikian, macro dapat juga disebut subprogram. Namun berbeda dengan subprogram yang lain, macro ditransalsikan secara terpisah dan dipanggil pada waktu run-time. Ketika macro diperbolehkan maka semantic analyzer harus mengidentifikasi pemanggilan macro dalam program sumber dan mempersiapkan body macro untuk pemanggilan.
·         Compile-time Operations
Merupakan operasi yang harus ada selama translasi berlangsung untuk mengontrol tranlasi program sumber. Bahasa C mempunyai operasi-operasi tersebut. Operasi “#define” mengizinkan konstanta atau ekspresi untuk dievaluasi sebelum program di-compile. Operasi “#ifdef” mengizinkan urutan kode alternatif untuk di-compile tergantung dari adanya atau tidak adanya suatu variabel yang pasti. Operasi-operasi bahasa C tersebut sebenernya juga merupakan sebuah macro.

Tidak ada komentar:

Posting Komentar