You are on page 1of 17

LAPORAN RESMI PRAKTIKUM 8 FUNCTIONS

Oleh :

Ahmad Reza Musthafa (7609040007) 2 D4 TEKNIK KOMPUTER

PROGRAM STUDI D4 TEKNIK KOMPUTER POLITEKNIK ELEKTRONIKA NEGERI SURABAYA - ITS

Implementation AWK chapter 8 in program : BEGIN{ lib = "Package import static private public int float char if else else if while do for ; == \\|\\| \\&\\& >= <= = \\+\\+ \\-\\- \\* \\/ \\+ \\- \\^ \\% < > \\( \\) \\{ \\} \\[ \\] \\\"[^\"]*\\\" '.' \\w+\\.\\w+ return [Az_][A-z_0-9]* [-+]?\\d+\\.\\d+ [-+]?\\d+ ," z[0]="\033[0;31m-------------------------------------------------------------------------------------------------------------------\033[0m" print printf("\t\t\t\t\t\t \033[0;34m"".:. WELCOME .:.\n""\033[0m") print z[0] libregex() print z[0] print (".:\033[0;34m""File Name""\033[0m") print z[0] printf("> ") getline name print temp=0 for(c=0;c<=500;c++){ getline isi[c] < name tabel=tabel""isi[c]"\n""\t" if(isi[c]==null) temp=temp+1 if(temp==4)c=500 } koding=tabel printf("\t%s",koding) print gabungkoding() pengecekan() } function gabungkoding(){ print z[0] print (".:\033[0;34m""Merge File""\033[0m") print z[0] mergekoding() print } function libregex(){ print(".:\033[0;34m""Tabel Regex""\033[0m") print z[0] split(lib,reg," ") a=length(reg) for(i=1;i<=a/2;i++){ printf (" \033[0;34m[%.2d]\033[0m= \033[0;35m%7.10s\033[0m\t\t\t\t\t\033[0;34m[%.2d]\033[0m= 2 D4 Teknik Komputer| 7609040007 2

\033[0;35m%s\033[0m\n",i,reg[i],i+a/2,reg[i+a/2])} } function mergekoding(){ gsub(/[ \n\t]+/," ",koding) print koding } function join(array,start,end,sep,result,i) { if (sep == "") sep = " " else if (sep == SUBSEP) sep = "" result = array[start] for (i = start + 1; i <= end; i++) result = result sep array[i] return result } function pengecekan(){ print z[0] print (".:\033[0;34m""Pemisahan""\033[0m") print z[0] pemisahan() detektor() # coba="#include<stdio.h> void main(){printf(a); printf(a);}" dmn=match(koding,/[ ]*(import|import)[ ]*[a-zA-Z]*[\.][a-zA-Z\*][ ]*[\;][ ]*)*[ ]*(public|private)[ ](class[ ][ ]*[^ \,\-\+\@\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*[\{][ ]*)((----------)?((unsigned[ ])?int[ ][ ]*[^ \,\-\+\@\$\%\^\&\*\!0-9][a-zA-Z0-9]*[ ]*([\=][ ]*[0-9]*[ ]*)?[\;][ ]*)?(----------)?((unsigned[ ])?(float|double)[ ][ ]*[^ \,\-\+\@\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*?([0-9]*|([0-9]*[\.][09]*))[ ]*)?[\;][ ]*)?(----------)?(char[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*(\')[ ]*[0-9A-Za-z\\\-\+\*\&\^\!]*[ ]*(\')[ ]*)?[\;][ ]*?)?)*(----------)?(String[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!09][a-zA-Z]*[0-9]*[ ]*([\=][ ]*["][ ]*[0-9A-Za-z\\\-\+\*\&\^\!]*[ ]*["][ ]*)?[\;][ ]*)?(---hehe)?(((public|private)[ ]*(String|boolean|double|integer)[ ]*[^ 0-9][a-zA-Z]*[0-9]*[ ]*[\(][ ]*[\)][ ]*[\{][ ]*(((----------)?(---batas-for---)?((for)[ ]*[\(][ ]*(((int)[ ])?[a-zA-Z_]*[0-9a-zA-Z]*[ ]*[\=][ ]*[0-9]*)?[ ]*[\;][ ]*([a-zA-Z_]*[0-9a-zA-Z]*[ ]*(([>=])|[\>]|[\<]|([<=])([==]))[ ]*[0-9]*[ ]*)?[ ]*[\;][ ]*([a-zA-Z_]*[0-9a-zAZ]*(([\+][\+])|([\-][\-]))[ ]*)?[ ]*[\)][ ]*([\{][ ]*(----isi-for)?((unsigned[ ])?int[ ][ ]*[^ \,\\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*[0-9]*[ ]*)?[\;][ ]*)?[ ]*(String[ ][ ]*[^ \,\\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*["][ ]*[0-9A-Za-z\\\-\+\*\&\^\!]*[ ]*["][ ]*)?[\;][ ]*)?(---isi-for)?[ ]*[\}])?[ ]*)?(--batas-for---)?((unsigned[ ])?int[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zAZ]*[0-9]*[ ]*([\=][ ]*[0-9]*[ ]*)?[\;][ ]*)?(----------)?((unsigned[ ])?(float|double)[ ][ ]*[^ \,\\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*?([0-9]*|([0-9]*(\.)[0-9]*))[ ]*)?[\;][ ]*)?(---------)?(String[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*["][ ]*[0-9A-Za-z\\\\+\*\&\^\!]*[ ]*["][ ]*)?[\;][ ]*)?(----------)?(char[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*[\'][ ]*[0-9A-Za-z\\\-\+\*\&\^\!]*[ ]*[\'][ ]*)?[\;][ ]*)?)*(((System.)((exit[ ]*[\(][ ]*[0-9]{1,1}[ ]*[\)])|(-------)?(out.(println|print)[ ]*[\(][ ]*["][ ]*([0-9a-zA-Z!@$^&]*[ ]*["]|(([0-9a-zA-Z!@$^&*%]*[ ]*)*["](,)[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*))[ ]*[\)](-------)?)|(-------)?(out.toString[ ]*[\(][ ]*[\)])|(out.getClass[ ]*[\(][ ]*[\)])|(out.close[ ]*[\(][ ]*[\)])|(out.flush[ ]*[\(][ ]*[\)])|(load[ ]*[\(][ ]*[^ 0-9][a-zA-Z]*[0-9]*[\)]))(------)?[ ]*[\;][ ]*)?)*)*(----------)?[\}][ ]*)*)*?[ ]*[\}]/) print z[0] 2 D4 Teknik Komputer| 7609040007 3

print (".:\033[0;34mStatus\033[0m") print z[0] if(dmn!=0) print "> \033[0;34m""SUCCESS, compiled with no error""\033[0m" #0 gak , 1 kandel else print "> \033[1;31m""ERROR [:101] mohon cek source code anda..""\033[0m" print } function pemisahan(){ kodingx=koding gsub(/[\;]/," ; ",kodingx) gsub(/[\{]/," { ",kodingx) gsub(/[\}]/," } ",kodingx) gsub(/[\(]/," ( ",kodingx) gsub(/[\)]/," ) ",kodingx) gsub(/[\,]/," , ",kodingx) gsub(/[\']/," ' ",kodingx) gsub(/[\"]/," \" ",kodingx) gsub(/[\|]/," | ",kodingx) gsub(/[\*]/," * ",kodingx) gsub(/[\=]/," = ",kodingx) gsub(/[\.]/," . ",kodingx) gsub(/[\+]/," + ",kodingx) gsub(/[\-]/," - ",kodingx) gsub(/[\>]/," > ",kodingx) gsub(/[\<]/," < ",kodingx) gsub(/[\%]/," % ",kodingx) split(kodingx,hasm," ") asm=length(hasm) if(asm%2!=0)asm=asm+1 for(i=1;i<=asm/2;i++){ printf (" \033[0;34m[%.2d]\033[0m= \033[0;35m%7.10s\033[0m\t\t\t\t\t\033[0;34m[%.2d]\033[0m= \033[0;35m%s\n\033[0m",i,hasm[i],i+asm/2,hasm[i+asm/2]) } print } function detektor(){ kodingxx=koding print z[0] print (".:\033[0;34mDetektor\033[0m") print z[0] hm1=match(kodingxx,/(import)[ ][a-zA-Z]*[\.]([\*]|[a-zA-Z]*)[ ]*[\;]/) if(hm1!=0) print "> import statement - success [:1]" 2 D4 Teknik Komputer| 7609040007 4

hm2=match(kodingxx,/(public|public)/) if(hm2!=0) print "> public statement - success [:2]" hm3=match(kodingxx,/(int)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\;]/) if(hm3!=0) print "> int variabel - success [:3]" hm4=match(kodingxx,/(String)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\;]/) if(hm4!=0) print "> String variabel - success [:4]" hm5=match(kodingxx,/(float)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\;]/) if(hm5!=0) print "> float variabel - success [:5]" hm6=match(kodingxx,/(public)[ ](class)[ ]*[a-zA-Z]*[ ]*[\{]/) if(hm6!=0) print "> class statement - success [:6]" hm7=match(kodingxx,/(char)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\;]/) if(hm7!=0) print "> char variabel - success [:7]" hm8=match(kodingxx,/(System.out.)[(print)|(println)|(exit)]/) if (hm8!=0) print "> System.out statement - success [:8]" hm9=match(kodingxx,/(char)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\=][ ]*[\'][ ]*[a-zA-Z0-9+-][ ]*[\'][ ]*[\;]/) if (hm9!=0) print "> nilai char variabel - success [:9]" hm10=match(kodingxx,/(int)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\=][ ]*[0-9]*[ ]*[\;]/) if(hm10!=0) print "> nilai int variabel - success [:10]" hm11=match(kodingxx,/(float)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\=][ ]*[0-9]*[\.][0-9]*[ ]*[\;]/) if(hm11!=0) print "> nilai float variabel - success [:11]" hm12=match(kodingxx,/(String)[ ][ ]*[a-zA-Z]*[0-9a-zA-Z]*[ ]*[\=][ ]*[\"][ ]*[a-zA-Z0-9+-]*[ ]*[\"][ ]*[\;]/) if (hm12!=0) print "> nilai String variabel - success [:12]" hm13=match(kodingxx,/(private|private)/) if(hm13!=0) print "> private statement - success [:13]" }

2 D4 Teknik Komputer| 7609040007

Preview Kondisi ketika code.java Success :

Keterangan : Hasil yang ditampilkan didalam terminal tersebut merupakan table regular expression yang sebelumnya dibentuk didalam format string, setelah itu disimpan kedalam format array. Berikut adalah format penulisan table tersebut : lib = "Package import static private public int float char if else else if while do for ; == \\|\\| \\&\\& >= <= = \\+\\+ \\-\\- \\* \\/ \\+ \\- \\^ \\% < > \\( \\) \\{ \\} \\[ \\] \\\"[^\"]*\\\" '.' \\w+\\.\\w+ return [Az_][A-z_0-9]* [-+]?\\d+\\.\\d+ [-+]?\\d+ ," Untuk mengubah string tersebut kedalam format array dapat memanfaatkan kondisi pemberian 1 space yang setelah itu dapat dipisahkan dengan memanfaatkan function split. Seperti dalam baris program berikut : split(lib,reg," ") Arti dari baris intruksi tersebut yaitu melakukan pemisahan suatu string berdasarkan kondisi 1 space yang kemudian hasil yang telah dihasilkan disimpan kedalam suatu variable.

2 D4 Teknik Komputer| 7609040007

Keterangan : Hasil tersebut merupakan pembacaan file code.java dengan menggunakan getline pada source code. Dalam penggunaan getline untuk melakukan pembacaan keseluruhan file yang berbasis teks, dapat dilakukan modifikasi dalam proses pembacaan. Dalam hal ini, programmer menggunakan array dalam media penyimpanan setiap baris isi dari file teks. Hasil yang telah disimpan kedalam array tersebut kemudian dilakukan penggabungan dengan menggunakan variable lain,misalnya table. Kemudian setiap langkah pengambilan data dari teks ditambahkan kedalam variable tersebut. Isi file yang dihasilkan pada terminal tersebut, sama dengan form dari default file. Source tersebut memiliki banyak whitespace yang dalam proses kompilasi, sebaiknya dihilangkan sebagian, untuk mengurangi lama proses. Untuk hal tersebut, maka dapat dilakukan dengan memanfaatkan function gsub untuk menyederhanakan whitespace yang berlebihan, menjadi 1 space saja. Untuk melakukannya dapat dilakukan dengan contoh code seperti berikut : gsub(/[ \n\t]+/," ",koding) Memiliki arti bahwa mereplace string pada source code yang memiliki regex /[ \n\t]+/ dengan . dan kemudian hasil replace tersebut disimpan kedalam variable yang bernama koding.

2 D4 Teknik Komputer| 7609040007

Keterangan : Hasil tersebut merupakan pemisahan beberapa token, menjadi suatu object yang berdiri sendiri. Object tersebut berfungsi untuk memudahkan dalam pengecekan error

Keterangan : 2 D4 Teknik Komputer| 7609040007 8

Hasil tersebut mengindikasikan bahwa dari source code tujuan, berhasil decompile, dan tidak ditemukan adanya error dalam beberapa analisa

Preview Ketika Kondisi code.java terdapat error :

Keterangan : Hasil tersebut merupakan pembacaan file code.java dengan menggunakan getline pada source code. Dalam penggunaan getline untuk melakukan pembacaan keseluruhan file yang berbasis teks, dapat dilakukan modifikasi dalam proses pembacaan. Dalam hal ini, programmer menggunakan array dalam media penyimpanan setiap baris isi dari file teks. Hasil yang telah disimpan kedalam array tersebut kemudian dilakukan penggabungan dengan menggunakan variable lain,misalnya table. Kemudian setiap langkah pengambilan data dari teks ditambahkan kedalam variable tersebut. Isi file yang dihasilkan pada terminal tersebut, sama dengan form dari default file. Source tersebut memiliki banyak whitespace yang dalam proses kompilasi, sebaiknya dihilangkan sebagian, untuk mengurangi lama proses. Untuk hal tersebut, maka dapat dilakukan dengan memanfaatkan function gsub untuk menyederhanakan whitespace yang berlebihan, menjadi 1 space saja. Untuk melakukannya dapat dilakukan dengan contoh code seperti berikut : gsub(/[ \n\t]+/," ",koding) 2 D4 Teknik Komputer| 7609040007 9

Memiliki arti bahwa mereplace string pada source code yang memiliki regex /[ \n\t]+/ dengan . dan kemudian hasil replace tersebut disimpan kedalam variable yang bernama koding.

Keterangan : Hasil tersebut merupakan pemisahan beberapa token, menjadi suatu object yang berdiri sendiri. Object tersebut berfungsi untuk memudahkan dalam pengecekan error

2 D4 Teknik Komputer| 7609040007

10

Keterangan : Hasil tersebut mengindikasikan bahwa dari source code tujuan, terdapat error yang disebabkan kesalahan penulisan syntax. Program awk tersebut baru mampu mendeteksi intruksi yang digunakan telah sesuai dengan format penulisan program menggunakan bahasa java atau tidak

Analisa: Dari source code diatas untuk mengimplementasikan penggunaan function dalam pemrograman awk, diantaranya terdapat pada baris program berikut : function join(array,start,end,sep,result,i) { if (sep == "") sep = " " else if (sep == SUBSEP) sep = "" result = array[start] for (i = start + 1; i <= end; i++) result = result sep array[i] return result } Penggunaan function bertujuan untuk mengelompokkan beberapa baris intruksi program yang sewaktu-waktu dapat dipanggil dengan memanggil nama function, supaya tidak menghabiskan banyak resource. Suatu function dapat memiliki argument dengan beberapa tipe data, dalam awk secara default sudah memiliki tipe data string. Seperti pada bahasa pemrograman lainnya, bahasa awk juga mengharuskan pemakaian tanda kurung buka dan kurung tutup setlah deklarasi nama fungsi. Ruang diantara tanda kurung tersebut dapat juga diisi oleh beberapa argument sesuai dengan tujuan dan manfaat dalam programming. Berikut adalah penjelasan tentang pecahan source code diatas: Baris pertama merupakan pendeklarasian nama dan argument yang mewakili fungsi tersebut. Dalam pemrograman berbasis awk, untuk range atau blok fungsi dapat menggunakan tanda kurung kurawal { }. Hal ini sangat berbeda dengan bahasa pemrograman phyton, yang tidak mengharuskan pemakaian tanda tersebut, melainkan hanya menggunakan white space. Didalam blok tersebut terdapat beberapa intruksi program, intruksi tersebut bertujuan untuk melakukan penggabungan string dari beberapa variable yang berupa array, jadi nilai argument yang berada didalam deklarasi fungsi dimanfaatkan untuk proses intruksi selanjutnya. Penggunaan fungsi di dalam awk programming yang berbasis teks, harus dimulai diluar blok begin{}. Hal itu karena fungsi merupakan suatu blok diluar proses begin yang sewaktu-waktu dapat dipanggil kedalam blok begin{}

2 D4 Teknik Komputer| 7609040007

11

2 D4 Teknik Komputer| 7609040007

12

Analisa Percobaan diatas merupakan implementasi bahasa pemrograman awk dalam penggunaan regular ekspresi dengan menggunakan teks editor. # implementasi penggunaan \n Dalam pemrograman awk menggunakan teks, source code seperti diatas, tujuan dari penggunaan ekspresi \n yaitu untuk menuju baris selanjutnya dan mengeksekusi baris program selanjutnya, ekspresi tersebut hanya memberikan efek pada intruksi yang bertujuan untuk mencetak output pada terminal saja # implementasi penggunaan \t Ekpresi \t pada intruksi print atau printf, bertujuan untuk melakukan tabulasi terhadap string pada intruksi print atau printf tersebut, sehingga ketika user mengetikkan print(aku\treza), maka akan menghasilkan output berupa aku <tab> reza. # implementasi penggunaan \v 2 D4 Teknik Komputer| 7609040007 13

Ekspresi \v pada intruksi print atau printf bertujuan untuk melakukan tabulasi secara vertical terhadap string yang berada didalam intruksi print atau printf, ketika user mengetikkan print(aku\vreza), maka akan dihasilkan output pada terminal berupa aku <tab vertical>reza # implementasi penggunaan \b Ekspresi \b pada intruksi print atau printf bertujuan untuk melakukan <backspace> terhadap karakter sebelumnya # implementasi penggunaan tolower Intruksi tersebut berfungsi untuk melakukan perubahan bentuk dari suatu string menjadi suatu string yang hanya terdiri dari huruf kecil saja. Intruksi ini biasanya dimanfaatkan bersamaan dengan intruksi print atau printf pada awk programming melalui terminal maupun melalui teks editor Dalam source code diatas penggunaan intruksi tolower terhadap suatu variable yang didalamnya bernilai Reza. Ketika mendapat intruksi tolower, maka nilai dari variable tersebut menjadi reza # implementasi penggunaan toupper Intruksi tersebut berfungsi untuk melakukan perubahan bentuk dari suatu string menjadi suatu string yang hanya terdiri dari huruf besar saja. Intruksi ini biasanya dimanfaatkan bersamaan dengan intruksi print atau printf pada awk programming melalui terminal maupun melalui teks editor Dalam source code diatas penggunaan intruksi tolower terhadap suatu variable yang didalamnya bernilai Reza. Ketika mendapat intruksi toupper, maka nilai variable tersebut menjadi REZA # penggunaan teks editor dalam membuat program bahasa awk memiliki banyak keuntungan disbanding menggunakan terminal secara keseluruhan, hal tersebut dikarenakan dalam penggunaan teks editor dapat membuat source code yang kemudian disimpan kedalam hardisk, sehingga user untuk membuka atau mengembangkan program tersebut tidak perlu mengetikkan baris program dari awal lagi, namun dapat dilakukan dengan menambahkan atau mengedit workspace yang telah tersimpan. # untuk menjalankan source code awk melalui terminal, dapat diketikkan intruksi awk f <nama file> <enter>

2 D4 Teknik Komputer| 7609040007

14

2 D4 Teknik Komputer| 7609040007

15

Analisa Percobaan diatas merupakan implementasi bahasa pemrograman awk dalam penggunaan regular ekspresi dengan menggunakan teks editor. Dari program diatas, banyak menggunakan beberapa ekspresi dari matematika, diantaranya ekspresi perkalian *, pembagian /, penjumlahan +, pengurangan -, dan perhitungan matematis lainnya. Dalam pembuatan pecahan source code diatas, programmer menggunakan pengelompokan ekspresi matematis menjadi suatu fungsi, dimana didalam awk dapat berupa function <nama fungsi>() { #baris program } Fungsi tersebut dapat dipanggil dengan cara mengetikkan nama fungsi yang selanjutnya disusul dengan tanda ( dan ), dimana didalam tanda tersebut biasanya disertai argument-argumen yang mendukung proses selanjutnya

Kesimpulan: Penggunaan fungsi di dalam awk programming yang berbasis teks, harus dimulai diluar blok begin{}. Hal itu karena fungsi merupakan suatu blok diluar proses begin yang sewaktu-waktu dapat dipanggil kedalam blok begin{} Dalam pemrograman awk, tidak membatasi jumlah penggunaan fungsi seperti bahasa pemrograman lainnya. Fungsi dalam awk juga memiliki argument yang data dimanfaatkan untuk intruksi program 2 D4 Teknik Komputer| 7609040007 16

selanjutnya. Penggunaan function bertujuan untuk mengelompokkan beberapa baris intruksi program yang sewaktu-waktu dapat dipanggil dengan memanggil nama function, supaya tidak menghabiskan banyak resource. Suatu function dapat memiliki argument dengan beberapa tipe data, dalam awk secara default sudah memiliki tipe data string.

2 D4 Teknik Komputer| 7609040007

17