Rabu, 07 Oktober 2015

Teknik Kompilasi - Analisis Leksikal





Tugas Teknik Kompilasi kali ini adalah membuat analisis leksikal.
Jadi, sebelum mengerjakan tugas lebih lanjut, kita ketahui dulu apa itu Analisis Leksikal.

Analisis Leksikal adalah aliran karakter yang membentuk program sumber dibaca dari kiri ke kanan dan dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam suatu kesatuan mempunyai suatu arti tersendiri.
Analisis ini melakukan penerjemahan masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya.
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.
Kira-kira seperti itulah pengertian Analisis Leksikal.

Untuk selanjutnya kita langsung saja ke contoh kasus analisis leksikal.
Disini saya mempunyai sebuah coding program yaitu program Pola Bintang menggunakan pemograman Java Netbeans. Agar dapat melakukan analisis leksikal maka kita lakukan sedikit kesalahan pada coding programnya seperti ini :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
packet starpattern;

/**
 *
 * @author Picka
 */
publik klass Starpattern {

    /**
     * @param args the command line arguments
     */
    publik staticc void main(String[] args) {
        // TODO code application logic here
        for (int i= 1; i<=5;i++)
        {
            for (int j=i;j<=5;j++)
            {
                System.out.print("*")
            }
            System.out.println()
}
    }
}

Setelah itu kita coba compile maka pasti akan di temukan beberapa kesalahan pada program dan program tidak dapat di-Run atau dijalankan. Untuk mengetahui letak kesalahan pada program maka kita lakukan analisis leksikal. Cara kerja analisis leksikal adalah melakukan scanner atau pemindaian dari bagian atas duluan lalu ke bawah dan juga dari arah kiri terlebih dahulu baru ke arah kanan.
Pada Java Netbeans, kesalahan pada coding langsung ditampilkan dengan mark atau tanda merah di awal line seperti ini :

















Setelah melakukan analisis leksikal kita akhirnya dapat mengetahui kesalahan pada coding kita, langsung saja kita mencari solusi agar kesalahan pada coding dapat diperbaiki.
Solusi dari kesalahan pada coding diatas adalah :

Setelah diperbaiki maka hasil coding yang sudah jadi dan tidak ada lagi kesalahan adalah sebagai berikut :
























Dan ini adalah output dari program "Pola Bintang" yang telah dianalisa dan diperbaiki :











**********************T H A N K  Y O U**********************

Rabu, 16 September 2015

Tugas Periklanan

PERIKLANAN



Iklan atau dalam bahasa Indonesia formalnya adalah Pariwara adalah promosi benda, barang atau jasa, tempat usaha , dan ide yang harus dibayar oleh sebuah sponsor. Manajemen pemasaran melihat iklan sebagai bagian dari strategi promosi secara keseluruhan. Komponen lainnya dari promosi termasuk publisitas, hubungan masyarakat, penjualan dan promosi penjualan.
Periklanan merupakan bentuk komunikasi yang digunakan untuk membujuk audiens (pemirsa, pembaca atau pendengar) untuk mengambil beberapa tindakan sehubungan dengan produk, ide, atau layanan. Tujuan dari disampaikannya iklan tersebut adalah mengarahkan perilaku konsumen terhadap suatu penawaran komersial ataupun mempersuasi seseorang dalam melakukan sesuatu (seperti iklan politik/layanan masyarakat yang nonkomersial).
Pengiklan Komersial seringkali mencari untuk menghasilkan peningkatan konsumsi dari mereka produk atau jasa melalui "branding," yang melibatkan pengulangan atau nama produk gambar dalam upaya untuk kualitas tertentu berasosiasi dengan merek di benak konsumen. Komersial pengiklan rokok yang menghabiskan uang untuk mengiklankan barang-barang lainnya dari produk konsumen atau jasa termasuk partai politik, kelompok kepentingan, organisasi keagamaan dan lembaga pemerintah. Nirlaba organisasi dapat mengandalkan mode bebas dari persuasi, seperti pengumuman layanan publik .
Saluran komunikasi nonpersonal menyampaikan pesan tanpa melakukan kontak atau interaksi pribadi. Tetapi dilakukan melalui media, atmosfer, dan acara. komunikasi non-pribadi dari sponsor diidentifikasi menggunakan media massa. untuk membujuk mempengaruhi penonton. Atmosfer adalah “lingkungan yang dikemas” yang menciptakan atau memperkuat kecenderungan pembeli untuk membeli produk. Jadi, kantor konsultan hukum didekorasi dengan karpet oriental dan furnitur dari kayu untuk mengkomunikasikan “kemapanan” dan “keberhasilan”. Acara adalah kejadian yang dirancang untuk mengkomunikasikan pesan tertentu kepada pelanggan sasaran. Departemen hubungan masyarakat mengadakan konferensi pers, pesta peresmian, dan mensponsori pertandingan olah raga untuk mencapai efek komunikasi spesifik pada audiens sasaran. Media terdiri atas media cetak (koran, majalah, surat langsung), media penyiaran (radio, televisi), media elektronik (pita audio, pita video, videodisk, CD-ROM), dan media display (papan reklame, tanda reklame, poster). Sebagian besar pesan nonpersonal datang melalui media yang dibayar. Arus komunikasi dua-arah ini memiliki beberapa implikasi. Pertama, pengaruh media massa terhadap opini publik tersebut tidak selangsung, sekuat, dan seotomatis yang diperkirakan. Tetapi, melalui para permimpin opini, orang-orang yang opininya diperlukan dalam satu atau beberapa kategori produk. Para pemimpin opini lebih dekat pada media massa dibandingkan orang-orang yang mereka pengaruhi. Mereka membawa pesan kepada orang-orang yang kurang dekat pada media massa tersebut, dan mampu memperluas pengaruh media massa. Mereka mungkin membawa pesan yang diubah atau tidak sama sekali, sehingga berperan sebagai penjaga pintu gerbang. Kedua, arus komunikasi dua-arah menantang pendapat bahwa gaya konsumsi orang-orang terutama dipengaruhi oleh “efek menetes ke bawah” (trickle down effect) dari kelas status sosial yang lebih tinggi. Sebaliknya, orang-orang terutama berinteraksi dalam kelompok sosial mereka sendiri dan memperoleh gaya mereka dan ide-ide lain dari orang-orang seperti mereka sendiri yang merupakan pemimpin opini. Ketiga, komunikasi dua-arah berarti bahwa komunikator massal akan lebih efisien dengan mengarahkan pesannya secara khusus kepada para pemimpin opini dan membiarkan mereka membawa pesan tersebut kepada orang-orang lain. Jadi perusahaan farmasi mencoba mempromosikan obat - obatan barunya kepada dokter-dokter yang paling berpengaruh terlebih dahulu. Penelitian yang terakhir menunjukkan bahwa pemimpin opini dan masyarakat umum dipengaruhi oleh komunikasi massal. Pemimpin opini dipicu oleh media massa untuk menyebarkan informasi, sedangkan masyarakat umum mencari infornasi dari para pemimpin opini. Para peneliti komunikasi sedang mengarah pada pendekatan struktur-sosial dalam komunikasi antarpribadi. Mereka melihat bahwa masyarakat terdiri atas klik-klik (cliques), yaitu kelompok-kelompok sosial kecil yang para anggotanya lebih sering berinteraksi satu sama lain dibandingkan dengan orang-orang lain. Anggota klik bersama, dan keakrabannya mempermudah komunikasi yang efektif, tetapi juga mengisolasi klik tersebut dari ide baru. Tantangannya adalah menciptakan lebih banyak keterbukaan sistem yang memungkinkan klik-klik bertukar informasi dengan kelompok lain dalam masyarakat. Keterbukaan ini dibantu oleh orang-orang yang berfungsi sebagai penghubung dan penjembatan. Seorang penghubung (liaison) adalah seseorang yang menghubungkan dua klik atau lebih tanpa menjadi anggota salah satu klik itu. Seorang penjembatan (bridge) adalah seseorang yang termasuk dalam salah satu klik dan berhubungan dengan orang lain di klik lain.

SEJARAH PERIKLANAN

4000 SM
Mesir menggunakan papirus untuk membuat pesan penjualan dan poster-poster. pesan Komersial dan menampilkan kampanye politik telah ditemukan di reruntuhan Pompeii dan kuno Saudi . Hilang dan menemukan iklan di papirus yang umum di Yunani Kuno dan Romawi Kuno .Lukisan dinding atau batu untuk iklan komersial merupakan manifestasi lain dari bentuk iklan kuno, yang hadir untuk hari ini di banyak bagian Asia, Afrika, dan Amerika Selatan.Tradisi lukisan dinding dapat ditelusuri kembali ke India seni batuan lukisan yang tanggal kembali ke 4000 SM. Sejarah memberitahu kita bahwa Out-rumah iklan- dan billboard merupakan bentuk tertua iklan.
Sebagai kota dan kota-kota Abad Pertengahan mulai tumbuh, dan masyarakat umum tidak dapat membaca, tanda-tanda bahwa hari ini akan berkata tukang sepatu, miller, penjahit atau pandai besi akan menggunakan gambar yang berhubungan dengan perdagangan mereka seperti boot, jas, topi, jam, berlian, sepatu kuda, lilin atau bahkan tas tepung.Buah-buahan dan sayuran yang dijual di alun-alun kota dari belakang gerobak dan wagon dan pemilik mereka digunakan penelepon jalanan ( criers kota ) untuk mengumumkan keberadaan mereka untuk kenyamanan pelanggan.
ABAD KE-17
Pendidikan menjadi kebutuhan yang sangat penting terutama dalam membaca, serta pencetakan, lalu iklan semakin dikembangkan dan diperluas untuk mencakup selebaran.Pada abad ke-17 iklan mulai muncul di koran mingguan di Inggris. Iklan cetak awal ini digunakan terutama untuk mempromosikan buku dan surat kabar, yang menjadi semakin terjangkau dengan kemajuan di percetakan , dan obat-obatan, yang semakin dicari sebagai penyakit rusak Eropa Namun, karena adnya iklan palsu dan apa yang disebut dukun , iklan menjadi masalah, yang diantar dalam regulasi konten iklan.
Sebagai perekonomian diperluas selama abad 19, periklanan tumbuh bersama.Di Amerika Serikat, keberhasilan ini format iklan akhirnya mengarah pada pertumbuhan periklanan mail-order.
ABAD KE-18
Koran Prancis La Presse adalah yang membuat program iklan yang dibayar di perhalaman-halamannya, yang memungkinkan untuk menurunkan harga, memperluas pembaca dan meningkatkan perusahaan profitabilitas dan formula itu segera ditiru oleh semua judul. Sekitar tahun 1840, Volney B. Palmer membentuk akar biro iklan modern di Philadelphia. Pada tahun 1842 jumlah besar Palmer membeli ruang di berbagai surat kabar pada tarif diskon kemudian dijual kembali ruang di tingkat yang lebih tinggi kepada pengiklan, aktual-salinan, tata letak, dan karya seni-adalah terhenti disiapkan oleh perusahaan yang ingin beriklan, yang berlaku, Palmer adalah seorang broker ruang.Keadaan berubah di akhir abad 19 ketika badan iklan NW Ayer & Son didirikan. Ayer dan Anak ditawarkan untuk merencanakan, membuat, dan melaksanakan kampanye iklan lengkap untuk pelanggannya. Pada tahun 1900 biro iklan telah menjadi titik fokus perencanaan kreatif, dan iklan kokoh sebagai sebuah profesi. Sekitar waktu yang sama, di Perancis, Charles-Louis Havas memperpanjang jasa kantor berita itu, untuk memasukkan iklan broker, sehingga kelompok Prancis pertama yang mengatur. Pada awalnya, lembaga yang broker untuk ruang iklan di koran. NW Ayer & Son adalah lembaga layanan penuh pertama yang bertanggung jawab atas isi iklan. 1895 iklan untuk sebuah produk berat badan.
Pada pergantian abad ini, ada beberapa pilihan karir bagi perempuan dalam bisnis, namun, iklan adalah salah satu dari sedikit. Karena perempuan bertanggung jawab untuk sebagian besar pembelian kebutuhan rumah tangga mereka masing - masing, pengiklan dan lembaga yang diakui nilai wawasan perempuan.
AWAL 1920-AN
Pada awal 1920-an, stasiun radio pertama didirikan oleh produsen peralatan radio dan pengecer yang menawarkan program dalam rangka untuk menjual radio lebih kepada konsumen. Seiring waktu berlalu, banyak organisasi nirlaba mengikuti dalam mendirikan stasiun radio mereka sendiri, dan termasuk klub dan kemasyarakatan. Kelompok sekolah Ketika praktek mensponsori program dipopulerkan, masing-masing program radio individu biasanya disponsori oleh pembisnis tunggal dalam pertukaran untuk menyebutkan nama singkat bisnis mereka di bagian awal dan akhir yang menunjukkan disponsori olehnya. Namun, pemilik stasiun radio segera menyadari bahwa mereka bisa mendapatkan lebih banyak uang dengan menjual hak sponsor dalam alokasi waktu kecil untuk beberapa bisnis di seluruh siaran stasiun radio mereka, daripada menjual hak sponsor untuk bisnis tunggal per show.
Praktek ini dilakukan ke televisi di akhir 1940-an dan awal 1950-an. Sebuah pertempuran sengit terjadi antara mereka yang mencari untuk mengkomersilkan radio dan orang-orang yang berpendapat bahwa spektrum radio harus dianggap sebagai bagian dari commons - untuk digunakan hanya non-komersial dan untuk kebaikan masyarakat. Kerajaan Serikat mengejar model pendanaan publik untuk BBC, awalnya sebuah perusahaan swasta, British Broadcasting Company, tetapi dimasukkan sebagai badan publik oleh Royal Charter pada tahun 1927. Di Kanada, para pendukung seperti Graham Spry yang juga dapat membujuk pemerintah federal untuk mengadopsi model pendanaan publik, menciptakan Canadian Broadcasting Corporation. Namun, di Amerika Serikat, model kapitalis menang dengan petikan dari Undang-Undang Komunikasi tahun 1934 yang menciptakan Komisi Komunikasi Federal. Namun, Kongres AS memang membutuhkan lembaga penyiaran komersial untuk beroperasi pada kepentingan umum kenyamanan, dan kebutuhan. penyiaran Publik sekarang ada di Amerika Serikat karena tahun 1967 Undang-Undang Penyiaran Publik yang mengarah pada Public Broadcasting Service dan National Public Radio.
AWAL 1950
Pada awal tahun 1950, DuMont Television Network mulai meluncurkan program modern yang menjual iklan dalam hitungan waktu kepada beberapa sponsor. Sebelumnya, DuMont telah kesulitan mencari sponsor bagi banyak tentang program dan dikompensasi dengan menjual blok kecil waktu iklan untuk beberapa bisnis. Hal ini akhirnya menjadi standar untuk industri televisi komersial di Amerika Serikat.Namun, itu masih praktek umum untuk memiliki menunjukkan sponsor tunggal, seperti Amerika Serikat Steel Jam. Dalam beberapa kasus sponsor dilaksanakan kontrol yang besar atas isi dari pertunjukan-sampai dengan dan termasuk memiliki agency periklanan seseorang benar-benar menulis pertunjukan.
Akhir 1980-an dan awal 1990-an melihat pengenalan televisi kabel dan khususnya MTV . Merintis konsep video musik , MTV diantar dalam jenis baru iklan: tunes konsumen dalam untuk pesan iklan, daripada ia menjadi oleh-produk atau ketinggalan zaman. Sebagai kabel dan televisi satelit menjadi semakin umum, saluran khusus muncul, termasuk saluran seluruhnya dikhususkan untuk iklan , seperti QVC , Home Shopping Network , dan ShopTV Kanada.
Pemasaran melalui internet membuka batas baru bagi pengiklan dan memberikan kontribusi kepada " dot-com boom "tahun 1990-an. Seluruh perusahaan semata-mata dioperasikan pada pendapatan iklan, yang menawarkan segala sesuatu dari kupon untuk mengakses internet gratis. Pada pergantian abad ke-21, sejumlah situs termasuk mesin pencari Google , memulai perubahan dalam iklan online dengan menekankan kontekstual yang relevan, iklan tidak mengganggu dimaksudkan untuk membantu, daripada membanjiri, pengguna. Hal ini mengakibatkan sejumlah besar upaya sejenis dan kecenderungan peningkatan iklan interaktif .
Bagian dari belanja iklan relatif terhadap PDB telah berubah sedikit di seluruh perubahan besar dalam media . Sebagai contoh, di Amerika Serikat pada 1925, media iklan utamanya adalah koran, majalah, tanda-tanda pada trem , dan outdoor poster . Pada tahun 1998, televisi dan radio sudah menjadi media periklanan besar. Meskipun demikian, belanja iklan sebagai bagian dari PDB sedikit lebih rendah sekitar 2,4 persen.
Sebuah inovasi iklan terbaru adalah " gerilya marketing ", yang melibatkan pendekatan yang tidak biasa seperti menggelar pertemuan di tempat umum, hadiah produk seperti mobil yang ditutupi dengan pesan merek, dan iklan interaktif dimana penonton dapat merespon menjadi bagian dari pesan iklan . periklanan gerilya meningkat menjadi lebih populer dengan banyak perusahaan. Jenis iklan ini tidak terduga dan inovatif, yang menyebabkan konsumen untuk membeli produk atau ide. Hal ini mencerminkan kecenderungan meningkatnya interaktif dan "tertanam" iklan, seperti melalui penempatan produk , memiliki suara konsumen melalui pesan teks , dan berbagai inovasi memanfaatkan layanan jaringan sosial seperti Facebook.

TUJUAN PERIKLANAN

Tujuan periklanan adalah tugas komunikasi tertentu yang harus dilakukan dengan audiens sasaran tertentu selama periode waktu yang tertentu. Tujuan periklanan dapat digolongkan menurut keperluan utamanya, apakah memberi informasi, membujuk, atau mengingatkan. Periklanan informatif digunakan habis-habisan pada saat suatu kategori produk yang baru mulai diperkenalkan. Tujuannya adalah membangun permintaan awal.



  1. Periklanan persuasif digunakan untuk membangun permintaan selektif akan suatu merek dengan cara meyakinkan konsumen bahwa merek tersebut adalah merek terbaik di kelasnya. Tujuan perusahaan adalah membangun permintaan selektif.
  2. Iklan perbandingan adalah iklan yang secara langsung membandingkan satu merek dengan satu atau sejumlah merek lainnya.
  3. Iklan pengingat adalah iklan yang digunakan untuk menjaga konsumen tetap berpikir mengenai suatu produk.
  4. Diferensiasi produk. Suatu merek yang amat mirip dengan merek lain dalam hal kelas produknya menuntut pengiklanan habis-habisan untuk membedakan diri dari yang lain.



Selasa, 15 September 2015

Tugas Teknik Kompilasi - Mesin Turing & Contohnya

MESIN TURING



Mesin Turing adalah model komputasi teoritis yang ditemukan oleh Alan Turing, berfungsi sebagai model ideal untuk melakukan perhitungan matematis. Walaupun model ideal ini diperkenalkan sebelum komputer nyata dibangun, model ini tetap diterima kalangan ilmu komputer sebagai model komputer yang sesuai untuk menentukan apakah suatu fungsi dapat selesaikan oleh komputer atau tidak (menentukan computable function). Mesin Turing terkenal dengan ungkapan " Apapun yang bisa dilakukan oleh Mesin Turing pasti bisa dilakukan oleh komputer."
Sebuah mesin turing terdiri atas barisan sel tersusun berupa pita yang dapat bergerak maju mundur, komponen aktif baca/tulis pita yang memiliki status perhitungan serta dapat mengubah/menulisi sel aktif yang ada di pita tadi, dan suatu kumpulan instruksi bagaimana komponen baca/tulis ini harus melakukan modifikasi terhadap sel aktif pada pita, serta bagaimana menggerakkan pita tersebut. Pada setiap langkah dalam komputasi, mesin ini akan dapat mengubah isi dari sel yang aktif, mengubah status dari komponen baca/tulis, dan mengubah posisi pita kekiri atau kekanan.


Keterangan :
- Tape : Tempat diletakannya inputan yang berupa kata/untai.
- Head: membaca dan menulisi sel pita mesin turing, bisa bergerak ke kiri atau ke kanan.
- Finite StateControl (FSC) : otak dari TM, diimplementasikan dari algoritma pengenalan kalimat.

Contoh Mesin Turing Sederhana

Sebuah contoh mesin Turing dapat dibangun untuk melakukan komputasi sederhana yang didefinisikan seperti ini:
Tentukan ada berapa angka 1 dalam sebuah string berbentuk 0111...110 (rangkaian angka 1 yang didahului dengan 0 dan diakhiri juga dengan 0), apakah berjumlah genap atau berjumlah ganjil.

Jika angka 1 di antara dua angka 0 berjumlah genap, tulis sebuah angka 0 pada salah satu sel dari tape mesin Turing.
Jika angka 1 di antara dua angka 0 berjumlah ganjil, tulis sebuah angka 1 pada salah satu sel dari tape mesin Turing.


                
Untuk menyelesaikan masalah komputasi ini, kita buat tiga buah State bagi mesin Turing ini, yaitu StartEven, dan Odd. Di samping itu kita buat sekumpulan aturan Transisi yang digunakan oleh mesin Turing ini untuk melakukan proses komputasinya. Aturan-aturan Transisi tersebut dapat dituliskan demikian:

1.    Jika mesin Turing berada pada status Start, dan membaca simbol 0 pada Tape, lakukan hal berikut: Pindah status menjadi status Even, Ganti simbol 0 pada Tape dengan Blank (atau Hapus simbol 0 pada Tape), dan Bergerak ke kanan satu sel.
2.   Jika mesin Turing berada pada status Even, dan membaca simbol 1 pada Tape, lakukan hal berikut: Pindah status menjadi status Odd, Ganti simbol 1 pada Tape dengan Blank, dan Bergerak ke kanan satu sel.
3.     Jika mesin Turing berada pada status Odd, dan membaca simbol 1 pada Tape, lakukan hal berikut: Pindah status menjadi Even, Ganti simbol 1 pada Tape dengan Blank, dan Bergerak ke kanan satu sel.
4.   Jika mesin Turing berada pada status Even, dan membaca simbol 0 pada Tape, lakukan hal berikut: Pindah status menjadi Halt, Ganti simbol 0 pada Tape dengan 0, dan tetap pada sel tersebut (tidak perlu berpindah ke kiri maupun ke kanan).
5.     Jika mesin Turing berada pada status Odd, dan membaca simbol 0 pada Tape, lakukan hal berikut: Pindah status menjadi Halt, Ganti simbol 0 pada Tape dengan 1, dan tetap pada sel tersebut.


Palindrome itu adalah berasal dari bahasa Yunani yaitu Palindromos A Palindrome. Palindromos A Palindrome adalah kata atau kalimat yang sama dieja maju atau mundur (bacaan yang sama dieja pada kedua arah). Sebagai contoh sederhana adalah beberapa kata yang sederhana yaitu rotor, rotator, civic, madam, racecar, level, dan lain-lain. Untuk contoh lain yaitu kalimat palindrome adalah No lemon no melon, No devil lived on, Swap God for a janitor rot in a jar of dog paws, dll.
Dibawah ini adalah graf dari palindrome detector , merupakan sebuah simulasi mesin turing yang berfungsi untuk mendeteksi kata palindrome yang diinputkan oleh user. Kata atau untai yang dibentuk masih terbatas pada penggunaan huruf “A” dan “B”. Contoh kata yang dibentuk adalah “ABAABBA” untuk kata yang tidak termasuk dalam palindrome, dan “BABBAB” untuk kata yang termasuk dalam palindrome.


Pemrograman sederhana jenis mesin Turing ini tidak sesulit yang dibayangkan. Dimana sebenarnya pemrograman ini akan membentuk graph. Transisi state terdiri dari 5-tupel rangkaian pada setiap baris, dengan format seperti ini:
[state],[karakter],[state baru],[karakterbaru],[arah]
1 , _ , 2 , # , >
2 , A , 3 , A , >
Karakter '_' dapat digunakan untuk menunjukkan kosong(blank), 'H' untuk menunjukkan sebagai state berhenti/Halt (hanya berlaku pada sisi kanan transisi), dan '<' dan '>' untuk menunjukkan arah masing-masing bergerak kekiri atau kanan.


Sumber :
https://id.wikipedia.org/wiki/Mesin_Turing
http://tjerdastangkas.blogspot.co.id/2012/09/kuliah-bahasa-pemrograman-komputasi-dan.html
http://rizkykaka123.blogspot.co.id/2014/02/tugas-teori-bahasa-dan-otomata-contoh.html

Selasa, 08 September 2015

Tugas Teknik Kompilasi - Proses Analisis Leksikal, Sintaktik, dan Semantik

Analisis Leksikal
Analisis Leksikal/Analisis Linier/Pembacaan Sekilas (Scanner)

Dalam kaitan ini aliran karakter yang membentuk program sumber dibaca dari kiri ke kanan dan dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam suatu kesatuan mempunyai suatu arti tersendiri.

Analisis ini melakukan penerjemahan masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya.

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.

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.

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.

2. 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.

- 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.


Analisis Sintaktik
Analisis Sintaktik/Analisis Hirarki/Parsing

Dalam tahap ini karakter atau token yang diperoleh pada analisis leksikal disusun dan dikelompokkan dalam suatu hirarki tertentu yang secara keseluruhan mempunyai arti tertentu.

Disinilah struktur program yang lebih besar diidentifikasi (statement, deklarasi, ekspresi, dan lainnya) menggunakan token leksikal yang dihasilkan Analisis Leksikal.

Analisis Sintaktik selalu bekerja bergantian dengan Analisis Semantik.
- Pertama, Analisis Sintaktik mengidentifikasikan urutan Token Leksikal seperti ekspresi, statement, subprogram, dan lainnya.
- Analisis Semantik kemudian dipanggil untuk proses unit ini.

Analisis Sintaktik berfungsi menghasilkan pohon sintaks program sumber yang didefinisi grammar.

Simbol terminal pohon sintaks adalah token-token yang dihasilkan scanner.


Analisis Semantik


Kata Semantik berasal dari Bahasa Yunani: semantikos,artinya memberikan tanda, penting, dari kata sema, tanda) adalah cabang linguistik yang mempelajari makna yang terkandung pada suatu bahasa, kode, atau jenis representasi lain.

Semantik biasanya dikontraskan dengan dua aspek lain dari ekspresi makna: sintaksis, pembentukan simbol kompleks dari simbol yang lebih sederhana, serta pragmatika, penggunaan praktis simbol oleh agen atau komunitas pada suatu kondisi atau konteks tertentu.

Disini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa kesesuainnya dengan komponen program yang ada.
Merupakan pusat dari tahapan translasi, struktur sintaktik yang dikenali oleh Analisis Sintaktik diproses, dan struktur objek eksekusi sudah mulai dibentuk. Analisis Semantik kemudian menjadi jembatan antara analisis dan sintesis dari translasi.
Analisis Semantik menghasilkan suatu kode objek yang dapat dieksekusi dalam translasi sederhana, tetapi biasanya bentuk dari kode objek yang dapat dieksekusi ini merupakan bentuk internal dari final program eksekusi, yang kemudian dimanipulasi oleh tahap optimisasi dari translator sebelum akhirnya kode eksekusi benar-benar dihasilkan.
Analisis semantik berperan dalam memeriksa kesalahan-kesalahan yang bersifat semantik. Salah satu peranan analisis semantik yang penting adalah pemeriksaan tipe variabel. Contohnya operator * hanya digunakan untuk operand dengan tipe integer ataupun real. Sedangkan operator and, or, digunakan hanya untuk operand dengan dengan tipe boolean.
Peranan lain dari analisis semantik adalah memeriksa keunikan suatu nama. Misalnya dalam Pascal, nama variabel global tidak boleh sama dengan prosedur atau nama fungsi. Dalam bahasa C, jika suatu nama konstanta didefinisikan lebih dari satu kali, maka akan diperiksa kesamaan nilai kedua konstanta.
Analisis semantik dapat dilakukan dengan menggunakan salah satu dari dua bentuk notasi, yaitu Definisi Berdasarkan Sintak (DBS) dan Skema Translasi. Definisi Berdasarkan Sintak (DBS) merupakan gabungan tata bahasa dengan himpunan aturan semantik yang akan menentukan struktur sintak dari suatu masukan. Aturan semantik digunakan untuk menghitung atribut, misalnya tipe atau nilai konstanta, yang berkaitan dengan simbol dalam aturan produksi.

Mendefinisikan arti dari program yang benar secara syntax dari bahasa tersebut.

int nilai[10]

Semantik akan menentukan deklarasi diatas akan menyebabkan ruang sebanyak 10 elemen integer yang diberikan kepada variabel nilai

if (a > b) max = a else max = b;

Ekspresi a > b harus dievaluasi terlebih dulu, tergantung dari nilai ini satu dari dua statement di belakangnya akan dieksekusi

Analisa Semantik pusat dari tahapan translasi struktur syntatic hasil dari syntatic analyzer diproses menghasilkan suatu kode objek yang executable sederhana akan dimanipulasi oleh tahap optimasi sampai jadi kode executable.

Analisis semantik menganalisis kebenaran source program. Analisis semantik akan memanfaatkan pohon sintaks yang dihasilkan oleh proses parsing. Bagian ini berfungsi menentukan makna dari serangkaian instruksi dari source code.

Tujuan: menentukan makna dari serangkaian instruksi yang terdapat pada source code.

Yang dilakukan oleh analisis semantik:
1. Type Checking
2. Dilakukan pengecekan tipe ekspresi dan variabel.
3. Static Checking: pengecekan dilakukan oleh kompiler

Contoh: pengecekan operator dan operand sesuai dengan tipe, flow of control check, uniqueness check (apakah ada duplikasi), name-related check (apakah sudah terdefinisi)

Dynamic Checking: pengecekan dilakukan oleh target program.
1. Type Conversion
2. Implicit, dilakukan oleh kompiler
3. Explicit, dilakukan oleh programmer

Contoh:

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.

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

Pada proses parsing, parser akan menjumpai ekspresi-ekspresi diatas seperti atas, seperti simbol ‘:=’, ‘+’, dan ‘*’. Namun parser tidak tahu makna yang tersimpan di dalam simbol-simbol tersebut.

Oleh karena itu Analisis Semantik akan melakukan:
- Apakah variabel yang ada telah didefinisikan sebelumnya.

- Apakah variabel tersebut tipenya sama dan benar.

-Apakah operan yang akan dioperasikan ada nilainya.

Menentukan derajat operator

Untuk dapat menjalankan aksinya, analisis semantik akan membutuhkan tabel simbol.

Tabel Simbol berfungsi untuk:
Menyimpan informasi tentang:
1. Nama variabel dan tipe datanya
2. Informasi detail untuk record dan array
3. Nama prosedur dan fungsi yang ada
4. Jumlah, nama, tipe data dan paramter fungsi/prosedur
5. Nama label
a. Konstanta dan String
b. Membantu pemeriksaan kebenaran semantik dari source code
c. Membantu mempermudah dalam pembuatan intermediate code dan code generation

Operasi Tabel Simbol
1. Jenis operasi yang dilakukan dalam tabel simbol adalah
a. Operasi insert (append/add)
b. Operasi search (dengan hashing)
c. Operasi delete

2. Biasanya tabel simbol dibuat pada tahap analisis lexical dan masing-masing data di dalam tabel simbol diberi indeks tertentu yang bersifat unik.

3. Oleh analisis sintaks, tabel simbol digunakan untuk memeriksa kebenaran sintaks dan membangkitkan pohon sintaks untuk proses parsing.

4. Hasilnya akan dianalisa kebenaran semantiksnya dan digunakan pada tahapan code generation untuk menghasilkan sekumpulan instruksi object code.

Tabel Simbol

- Pada dasarnya tabel simbol berisi daftar dan informasi indentifier pokok yang terdapat pada source code.

- Tabel ini disebut sebagai tabel pokok.

- Dari tabel pokok ini kemungkinan besar dapat terjadi tidak semua informasi tercover semuanya. Jadi diperlukan tabel lagi yang berfungsi sebagai tabel pembantu.

- Di dalam tabel utama harus terdapat field yang menjembatani identifier dari tabel utama ke tabel lain yang bersesuaian (analogikan dengan konsep basis data atau senarai pointer)

Elemen Tabel Simbol
1. Pada umumnya elemen-elemen tabel simbol:
2. No urut identifier (ID unik / auto increment)
3. Nama identifier: berisi nama-nama variabel, prosedure, fungsi, dan lain-lain yang akan digunakan untuk referensi pada analisis semantik, intermediate code, dan code generation.
4. Tipe identifier: berisi keterangan tipe identifier.
5. Object Time Address: berisi address yang mengacu pada alamat tertentu di memori
6. Dimensi (ukuran) dari identifier yang bersangkutan
7. Nomor baris variabel yang dideklarasikan
8. Field link (opsional)

Jenis Tabel Simbol
1. Beberapa jenis Tabel Simbol:
2. Tabel identifier: berisi daftar identifier
3. Tabel array: berisi informasi tambahan untuk array
4. Tabel blok: berisi variabel-variabel dalam lingkup blok yang sama (lokal)
5. Tabel real: berisi elemen tabel bernilai real
6. Tabel string: berisi informasi string
7. Tabel display: berisi blok yang aktif
8. Tabel integer: berisi informasi elemen bernilai integer

Tabel Simbol Identifier
1. No urut identifier
2. Nama identifier
3. Jenis identifier : prosedur, fungsi, tipe, variabel, konstanta
4. Tipe identifier: integer, real, char, boolean, string, record
5. Level : berupa kedalaman identifier (blok program). Misal main program = level 0, prosedur dan fungsi dalam main program = level 1. Field ini digunakan pada saat runtime untuk mengetahuicurrent activation record yang bisa diakses.
6. Pada identifier, perlu dicatat juga:
7. Alamat dari identifier
8. Informasi acuan identifier ke tabel identifier lain yang menerangkannya
9. Link: menghubungkan identifier ke identifier lainnya, atau yang dideklarasikan pada level yang sama
10. Normal: digunakan pada pemanggilan parameter by value dan by reference (berupa variabel boolean)

Contoh Tabel Identifier
Program A;
var B : integer;
Procedure X(Z:char);
var C : integer;
begin
. . . .

Pada tabel identifier akan muncul:
0A
1B
2X
3Z
4C

Contoh implementasi tabel identifier:
Table : array [0..tabmax] of
Record
Name : string;
Link: integer;
Obj: objek;
Tipe: types;
Ref: integer;
Normal: Boolean;
Level: 0..maxlevel;
Address: integer;
End;

Dimana :
Ø Objek = { konstant, variabel, prosedure, fungsi }
Ø Types = { notipe, int, reals, booleans, chars, arrays, records }

Tabel Array
1. No urut array dalam tabel
2. Tipe dari indeks array yang bersangkutan
3. Tipe elemen array
4. Alamat Referensi dari elemen array
5. Indeks batas atas dan bawah array
6. Jumlah elemen array
7. Ukuran total array = (atas –bawah + 1) * elemen size

Contoh implementasi:
TabArray: array [1..tabmax] of
Record
Indextype, elementype: types;
Elemenref, low, high, tabsize:integer;
End;

Tabel Blok
1. No urut blok
2. Batas awal blok
3. Batas akhir blok
4. Ukuran parameter
5. Ukuran variabel
6. Last variabel
7. Last parameter

Contoh Tabel Blok
TabBlok: array[1..tabmax] of
Record
Lastvar, lastpar, parsize, varsize:integer;
End;
Dengan contoh program di atas maka untuk program A:
Last variabel: 2 (lihat dari tabel idenfier, last variable adalah X = 2)
Variabel size: 2 (integer = 2 byte)
Last parameter: 0 (tanpa paramter)
Parameter size: 0
Untuk procedure X:
Last variabel: 4 (lihat dari tabel idenfier, last variable adalah C = 4)
Variabel size: 2 (integer = 2 byte)
Last parameter: 3 (Z = 3)
Parameter size: 1 (char = 1 byte)

Contoh Tabel Simbol lain
Tabel Real dan Tabel String:
1. No urut
2. Untuk real: nilai real sedangkan untuk string: karakter-karakter yang ada dalam string

Tabel Display:
1. Berfungsi mencatat blok yang sedang aktif
2. No urut
3. Blok yang sedang aktif
4. Pengisiannya menggunakan konsep stack

Urutan Pemrosesan
1. Urutan pengaksesan: Tabel Dsiplay –Tabel Blok –Tabel Simbol
2. Pertama, tabel display akan mengetahui mana bagian yang aktif, maka akan diketahui identifier-identier yang aktif dalam blok tersebut.
3. Informasi identifier yang ada mungkin belum lengkap sehingga diperlukan melihat referensi ke tabel-tabel pelengkap lainnya.

Implementasi Tabel Simbol
1. Jelas tidak menggunakan database, Tapi menggunakan:
2. Linked List
3. Tree
4. Hash table

Hash
Contoh fungsi hash:
maxtabel = 9
h(string) = Σ(ASCII(Ci)) mod (maxtabel+1)
h(“ABC”) = 65+66+67 = 198 mod 10 = 8
h(“AA”) = 65+65 = 130 mod 10 = 0
h(“BAC”) = 66+65+67 = 198 mod 10 = 8 terjadi collision
Maka :
0AA
1
2
3
4
5
6
7
8ABC -> BAC
9


Untuk mengetahui makna, maka rutin analisa semantik akan memeriksa:
- Apakah variabel yang ada telah didefinisikan sebelumnya,
- Apakah variabel – variabel tersebut tipenya sama,
- Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.

Untuk dapat menjalankan fungsi tersebut dengan baik, semantic analyzer seringkali menggunakan tabel simbol. Pemeriksaan bisa dilakukan pada tabel identifier, tabel display dan tabel blok, misal pada field link.

Pengecekan yang dilakukan oleh analisis semantik adalah :
- Memeriksa keberlakuan nama – nama meliputi pemeriksaan :
- Duplikasi
Pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bagian pengelola blok.
- Terdefinisi
Pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
- Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement – statement yang ada.
Misal : Bila ada operasi antara dua operan, maka tipe operan pertama harus bisa dioperasikan dengan operan kedua.

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

Kode Antara.
Pembentukan kode antara merupakan tahap lanjutan setelah analisis semantik. Hasil pembentukan kode antara dapat dianggap sebagai program dengan instruksi-instruksi bahasa mesin abstrak. Bentuk representasi kode antara harus mudah pembuatannya dan mudah diterjemahkan dalam bahasa tujuan. Salah satu bentuk representasi kode antara adalah kode tiga alamat. Misalnya, suatu kalimat matematik a := b * c + d memiliki bentuk kode tiga alamat sebagai berikut :
t1 := b * c t2 := t1 + d a := t2
Representasi kode tiga alamat memiliki bentuk yang menyerupai kode dalam bahasa Assembly, sehingga memudahkan proses penterjemahannya, jika bahasa tujuan adalah bahasa Assembly. Bentuk kode tiga alamat di atas memiliki karakteristik: mengandung paling banyak tiga operand dan dua operator, serta memiliki variabel sementara. Bentuk lain dari representasi kode antara adalah dalam bentuk representasi grafik, seperti pohon maupun graf. Salah satu manfaat pembentukan kode antara adalah ia berfungsi sebagai input untuk proses optimisasi. Salah satu contoh adalah jika terdapat sub ekspresi yang sama muncul dalam program pemakai, maka kompilator dengan fasilitas optimisasi tidak akan mengeksekusi ekspresi itu berulang kali, tapi cukup sekali.
Kode antara/Intermediate Code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari Kode Antara / intermediate code :
- Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin. Dengan adanya kode antara yang lebih machine independent maka kode antara yang dihasilkan dapat digunakan lagi pada mesin lainnya.
- Proses optimasi lebih mudah. Beberapa strategi optimisasi lebih mudah dilakukan pada kode antara daripada pada program sumber atau pada kode assembly dan kode mesin.
- Bisa melihat program internal yang gampang dimengerti. Kode antara ini akan lebih mudah dipahami dari pada kode assembly atau kode mesin.

Notasi Postfix.
Sehari-hari kita biasa menggunakan operasi dalam notasi infix (letak operator di tengah). Pada notasi Postfix operator diletakkan paling akhir maka disebut juga dengan notasi Sufix atau Reverse Polish.
Sintaks notasi Postfix :
&nb sp;
&nb sp; &nb sp;
Misalkan ekspresi :
&nb sp; &nb sp; (a + b)*(c + d)


Mudah dibangkitkan dari parse bottom-up
Misalkan aksi semantik untuk produksi
S _ i=E { Output (‘=‘,i.leksemes)}
E _ E + E { Output(‘+’) }
E _ E * E { Output(‘*’)}
E _(E) { Tak ada kerja}
E _ I { Output(i.leksemes)}

Sebelum mendaftar operator, terlebih dulu mendaftar semua
operandnya
Pada notasi postfix operator diletakkan paling akhir, maka disebut juga dengan notasi Sufix atau Reverse Polish. Sintaks notasi postfix :

Contoh ekspresi:
(a+b)*(c+d)
Dinyatakan dengan notasi postfix :
ab+cd+*
Kontrol program yang ada dapat diubah ke dalam notasi postfix. Misal :
IF THEN ELSE
Diubah ke dalam postfix :
BZ BR
↑ ↑
label1 label2
Keterangan :
BZ : branch if zero (zero = salah) {bercabang/meloncat jika kondisi yang dites salah}
BR : branch {bercabang/meloncat tanpa ada kondisi yang dites}

Arti dari notasi postfix diatas adalah :
“ Jika kondisi ekspresi salah, maka instruksi akan meloncat ke label1 dan menjalankan statement2. Bila kondisi ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke label2. Label1 dan label2 sendiri menunjukkan posisi tujuan loncatan, untuk label1 posisinya tepat sebelum statement2, dan label2 adalah statement2.”
Contoh lain:
WHILE DO
Diubah ke postfix :
BZBR
↑ ↑
label1 label2

Notasi N–Tuple.
Bila pada postfix setiap baris instruksi hanya terdiri dari satu tuple, pada notasi N–tuple setiap baris bisa terdiri dari beberapa tuple. Format umum notasi N-tuple adalah :
operator.......................N-1 operan
Notasi N-Tuple yang biasa digunakan adalah notasi 3 tupel dan 4 tupel.

Triples Notation
Notasi ini memiliki format sebagai berikut :

Contoh instruksi :
A := D * C + B / E
Kode antara tripel :
1. *, D, C
2. /, B, E
3. +, (1), (2)
4. :=, A, (3)

operasi perkalian/pembagian lebih prioritas dibandingkan penjumlahan/pengurangan
Contoh lain:
IF x > y THEN
x:= a – b
ELSE
x:= a + b
kode antara tripelnya :
1. >,x,y
2. BZ,(1),(6) {bila kondisi (1) salah satu loncat ke no (6)}
3. –,a,b
4. :=,x,(3)
5. BR, ,(8)
6. +,a,b
7. :=,x,(6)
Contoh :
&nb sp; A:= B+C*D/E
F:= C*D
List Instruksinya:
1. &nb sp; *, C, D
2. &nb sp; /, (1), E
3. &nb sp; +, B, (2)
4. &nb sp; :=, A, (3)
5. &nb sp; :=, F, (1)
List Eksekusinya :
1. &nb sp; 1
2. &nb sp; 2
3. &nb sp; 3
4. &nb sp; 4
5. &nb sp; 1
6. &nb sp; 5 


Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka dikembangkan Indirect Triples yang memiliki dua list, yaitu list instruksi dan list eksekusi. List instruksi berisi notasi tripel, sedang list eksekusi mengatur urutan eksekusinya.

Quadruples Notation
Format notasi quadruples :

Hasil adalah temporary variabel yang bisa ditempatkan pada memory atau register. Masalah yang ada bagaimana mengelola temporary variabel (hasil) seminimal mungkin
Contoh instruksi :
A := D * C + B / E
Dibuat dalam kode antara :
1. *, D, C, T1
2. /, B, E, T2
3. +, T1, T2, A


SUMBER : 
http://www.globalkomputer.com/Bahasan/Teknik-Kompilasi/Topik/Analisis-Leksikal.html
http://www.globalkomputer.com/Bahasan/Teknik-Kompilasi/Topik/Analisis-Leksikal.html
http://nurachman-ceper.blogspot.com/2010/05/analisa-semantik.html