Buku Referensi Teknik Kompilasi
1. Firrar Utdirartatmo, Teknik Kompilasi,Graha Ilmu, 2005
2. Jean Paul Tremblay & Paul G Sorenson, The Theory and Practice of Compiler Writing, McGraw Hill, 1985
Isi Materi 1 :
q Pengertian Teknik
Kompilasi
q Manfaat Teknik Kompilasi
q Compiler
q Interpreter
q Tahapan Teknik Kompilasi
Pengertian Teknik Kompilasi
Teknik :
Metode
atau Cara Kompilasi:
Proses
menggabungkan serta menterjermahkan sesuatu (source program) menjadi bentuk
lain Teknik kompilasi dapat diartikan
metode proses menggabungkan serta menteremahkan sesuatu (source program) menjadi bentuk lain
Manfaat Teknik
Kompilasi :
q
Membuat compiler
q
Membuat interpreter
Compiler adalah suatu program
yang menerjemahkan bahasa
program ( source
code) kedalam bahasa objek (obyek code). Compiler
menggabungkan keseluruhan bahasa program, mengumpulkannya
dan kemudian menyusunnya kembali.
Complier
memerlukan waktu untuk membuat suatu program dapat di eksekusi oleh computer, program
yang dieksekusi oleh compiler adalah
dapat berjalan lebih cepat disbanding program yang diperoduksi oleh interpreter, disamping
itu juga bersifat independen. Contoh program yang menggunakan compiler adalah Visual Basic,
Borland Delphi.
Proses compiler
Interpreter
adalah Perangkat lunak yang mampu mengeksekusi code program (yang ditulis oleh programmer) lalu menterjemahkannya ke dalam bahasa
mesin, sehingga mesin melakukan instruksi yang diminta oleh programmer tersebut. Perintah-perintah yang
dibuat oleh programmer tersebut dieksekusi baris demi baris, sambil
mengikuti logika yang terdapat di dalam kode tersebut.
Proses ini sangat berbeda dengan compiler,
dimana pada compiler, hasilnya sudah langsung berupa
satu kesatuan perintah
dalam bentuk bahasa
mesin, dimana proses
penterjemahan dilaksanakan sebelum
program tersebut dieksekusi.
Java dijalankan menggunakan interpreter yaitu Java Virtual Machine
(JVM). Hal ini menyebabkan source code Java yang telah dikompilasi menjadi
Java bytecodes dapat dijalankan pada platform yang
berbeda-beda. Proses Interpreter

Tahapan Teknik Kompilasi :
![]() |
xampp-win32-1.8.0.
Analisis
leksikal merupakan bagian dari kompilasi yang menerima input berupa aliran karakter kemudian memilah program sumber menjadi besaran leksikal yang
disebut dengan token. Token ini akan menjadi input bagi parser.
Scanner merupakan antarmuka
antara program sumber
dan analisa sintaks(parser).
Scanner melakukan pemeriksaan karakter per karakter
dari teks masukan,memecah program sumber menjadi bagian-bagian terkecil yang
disebut dengan token. Token adalah satuan terkecil dari bahasa sumber
yaitu deretan karakter
terpendek yang mengandung arti.
Token dapat dikelompokan menjadi
beberapa jenis sebagai
berikut
1. variabel
2. Konstanta
3. Keyword
4. Operator
5. Delimiter
Untuk memahami proses
analisis leksikal akan diberikan beberapa
contoh sebagai berikut
:
1.
Diketahui sumber
teks adalah 2x+5
Isi teks terdiri
dari token konstanta dan variabel Tahap pertama proses
analisis leksikal :
1. Pembacaan sumber teks dengan merunut karakter
demi karakter.
Dengan kode program php berikut, dapat membaca isi karakter teks.
<?php
print"<p
style=\"margin-top:100px\">"; print "<div align=\"center\">";
print "<font size=\"6\">Program
Analisis Leksikal</font>"; print"<br>";
print"<br>";
print "<form action=\"leksikal.php\" method=\"post\" name=\"input\">";
print
"<font size=\"6\">Isi teks</font><input
type=\"text\" name=\"teks\" size=\"40\" style=\"height:40px;font-size:30px\" >";
print"<br>"; print"<br>";
print
"<input type=\"submit\" name=\"proses\"
value=\"Proses\" style=\"height:40px;font- size:20px\" >";
print"<br>"; print"</form>"; if ($_POST)
{
$x=$_POST["teks"];
$kode=0; for($i=0;$i<strlen($x);$i++)
{
$y=substr($x,$i,1); print "<h2>$y</h2>";
}
}
?>
Simpan kode program dengan
nama file leksikal.php. Screen shoot input program tersebut
:

Sedangkan screen
shoot output program :


Tahap kedua dari analisis leksikal
2. Mengelompokan
karakter-karakter tersebut menjadi
bentuk token dan mengidentifikasi token tersebut
Dengan kode program php berikut, dapat mengelompokkan karakter
karakter-karakter tersebut menjadi
bentuk token dan mengidentifikasi token tersebut.variabel dan konstanta.
<?php
print"<p
style=\"margin-top:100px\">"; print "<div align=\"center\">";
print "<font size=\"6\">Program
Analisis Leksikal</font>"; print"<br>";
print"<br>";
print "<form action=\"leksikal2.php\" method=\"post\" name=\"input\">";
print
"<font size=\"6\">Isi
teks  </font><input type=\"text\"
name=\"teks\" size=\"40\"
style=\"height:40px;font-size:30px\" >";
print"<br>"; print"<br>";
print
"<input type=\"submit\" name=\"proses\"
value=\"Proses\" style=\"height:40px;font- size:30px\" >";
print"<br>"; print"</form>";
if ($_POST)
{
$x=$_POST["teks"];
$kata='';
$m=0; for($i=0;$i<=strlen($x);$i++)
{
$karakter=substr($x,$i,1); if(ord($karakter)<>32)
{
if (((ord($karakter)>=65) and (ord($karakter)<=90)) or ((ord($karakter)>=97) and (ord($karakter)<=122))or
((ord($karakter)>=48) and (ord($karakter)<=57)))
$kata=$kata.substr($x,$i,1);
else
if((substr($x,$i,1)=='+') or (substr($x,$i,1)=='*'))
{
if ($kata<>'')
{
$kode=0;
$kode2=0;
for($j=0;$j<strlen($kata);$j++)
{
$karakter=substr($kata,$j,1);
if ((ord($karakter)>=48) and (ord($karakter)<=57))
$kode=$kode+1; else
$kode2=$kode2+1;
}
if (($kode>=1) and ($kode2==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='konstanta';
$kata='';
}
if (($kode2>=1) and ($kode==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='variabel';
$kata='';
}
if (($kode2>=1) and ($kode>=1))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='tidak dikenal';
$kata='';
}
}
$m=$m+1;
$nt[$m]=substr($x,$i,1);
$jt[$m]='operator';
}
else
{
if ($kata<>'')
{
$kode=0;
$kode2=0;
for($j=0;$j<strlen($kata);$j++)
{
$karakter=substr($kata,$j,1);
if ((ord($karakter)>=48) and (ord($karakter)<=57))
$kode=$kode+1; else
$kode2=$kode2+1;
}
if (($kode>=1) and ($kode2==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='konstanta';
$kata='';
}
if (($kode2>=1) and ($kode==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='variabel';
$kata='';
}
if (($kode2>=1) and ($kode>=1))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='tidak dikenal';
$kata='';
}
}
if (ord(substr($x,$i,1))<>32)
{
$m=$m+1;
$nt[$m]=substr($x,$i,1);
$jt[$m]='tidak dikenal';
}
}
}
else
{
if ($kata<>'')
{
$tanda=0;
$tanda2=0;
for($i=0;$i<strlen($kata);$i++)
{
$karakter=substr($x,$i,1);
if ((ord($karakter)>=48) and (ord($karakter)<=57))
{
$kode=1;
$tanda=$tanda+1;
}
else
{
$kode=0;
$tanda2=$tanda2+1;
}
}
if (($kode==1) and ($tanda==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='konstanta';
$kata='';
}
else
if (($kode==0) and ($tanda2==0))
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='variabel';
$kata='';
}
else
{
$m=$m+1;
$nt[$m]=$kata;
$jt[$m]='tidak dikenal';
$kata='';
}
}
}
}
print "<h1>Daftar Token</h1>";
print "<table border=\"1\" width=\"800\">";
print "<tr><td width=\"70\"><h1>Nomor</h1></td><td><h1>Nama Token</h1></td><td><h1>Jenis
Token</h1></td></tr>";
for($k=1;$k<=$m;$k++)
if ($nt[$k]<>'')
print "<tr align=\"center\"><td width=\"70\"><h1>$k</h1></td><td><h1>$nt[$k]</h1></td><td><h1>$jt[$k]</h1></td></tr>";
print"</table>";
}
?>
Simpan kode program dengan
nama file leksikal2.php. Screen shoot input program tersebut
:
Sedangkan screen
shoot output program :
![]() |
Program
dapat juga mengidentifikasi bila ada token yang tidak dikenal. Contoh
diketahui isi teks 2x+5. Maka 2x adalah
token yang tidak dikenal Screen
shoot input program
:
Sedangkan screen
shoot output :
![]() |
Program dapat juga mengidntifikasi jika karakter konstanta lebih dari atau karakter variabel
lebih dari 1
Input dan output masing-masing kasus dapat ditampilkan di bawah : Screen Shoot Input :
Screen Shoot Output
:
![]() |
Screen Shoot Input
![]() |
Screen Shoot Output
:
Screen Shoot Input :
![]() |
Screen Shoot Output
:
![]() |
Komentar
Posting Komentar