awk programming 9 - ahmad reza musthafa

12
LAPORAN RESMI PRAKTIKUM 9 INTERNATIONALIZATION WITH AWK Oleh : Ahmad Reza Musthafa (7609040007) 2 – D4 TEKNIK KOMPUTER PROGRAM STUDI D4 TEKNIK KOMPUTER POLITEKNIK ELEKTRONIKA NEGERI SURABAYA - ITS

Upload: ahmad-reza-musthafa

Post on 04-Aug-2015

19 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: AWK Programming 9 - Ahmad Reza Musthafa

LAPORAN RESMI PRAKTIKUM 9

INTERNATIONALIZATION WITH AWK

Oleh :

Ahmad Reza Musthafa (7609040007)

2 – D4 TEKNIK KOMPUTER

PROGRAM STUDI D4 TEKNIK KOMPUTER

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA - ITS

Page 2: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 2

Implementation “AWK chapter 9” in program :

BEGIN{ lib = "Package import static private public int float char if else else if while do for ; == \\|\\| \\&\\& >= <= = \\+\\+ \\-\\- \\* \\/ \\+ \\- \\^ \\% < > \\( \\) \\{ \\} \\[ \\] \\\"[^\"]*\\\" '.' \\w+\\.\\w+ return [A-z_][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=

Page 3: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 3

\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]*[\.][0-9]*))[ ]*)?[\;][ ]*)?(----------)?(char[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][a-zA-Z]*[0-9]*[ ]*([\=][ ]*(\')[ ]*[0-9A-Za-z\\\-\+\*\&\^\!]*[ ]*(\')[ ]*)?[\;][ ]*?)?)*(----------)?(String[ ][ ]*[^ \,\-\+\@\\$\%\^\&\*\!0-9][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-zA-Z]*(([\+][\+])|([\-][\-]))[ ]*)?[ ]*[\)][ ]*([\{][ ]*(----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-zA-Z]*[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]

Page 4: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 4

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]"

Page 5: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 5

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]" }

Page 6: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 6

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 [A-

z_][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.

Page 7: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 7

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.

Page 8: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 8

Keterangan :

Hasil tersebut merupakan pemisahan beberapa token, menjadi suatu object yang berdiri sendiri.

Object tersebut berfungsi untuk memudahkan dalam pengecekan error

Keterangan :

Page 9: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 9

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)

Page 10: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 10

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

Page 11: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 11

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 internationalization dalam

pemrograman awk, diantaranya terdapat pada baris program berikut :

#: lib/argmatch.c:137 #, c-format msgid "invalid argument %s for %s" msgstr "" #: lib/argmatch.c:138 #, c-format msgid "ambiguous argument %s for %s" msgstr "" #: lib/argmatch.c:157 #, c-format msgid "Valid arguments are:" msgstr "" #: lib/closeout.c:64 msgid "write error" msgstr "" #: lib/getopt.c:738 lib/getopt.c:741 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "%s: pilihan tak dikenal `%c%s'\n" #: lib/getopt.c:796 lib/getopt.c:799 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: pilihan ilegal -- %c\n" #: lib/getopt.c:805 lib/getopt.c:808 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: pilihan tidak valid -- %c\n" #: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: pilihan membutuhkan sebuah argumen -- %c\n" #: lib/getopt.c:935 lib/getopt.c:954 #, c-format

Page 12: AWK Programming 9 - Ahmad Reza Musthafa

2 – D4 Teknik Komputer| 7609040007 12

msgid "%s: option `-W %s' is ambiguous\n" msgstr "%s: pilihan `-W %s' rancu\n" #: lib/getopt.c:978 lib/getopt.c:999 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "%s: pilihan `-W %s' tidak membolehkan sebuah argumen\n"

Bash menyediakan sebuah sintaks quoting baru yang memungkinkan string diterjemahkan menurut

locale saat ini. Locale dapat pula dirubah, sehingga pesan shell dapat bersifat language-spesific.

Fasilitas pengeditan perintah baris memungkinkan input karakter delapan-bit, sehingga kebanyakan

keluarga set karakter ISO-8859 didukung.

Kesimpulan:

Bash menyediakan sebuah sintaks quoting baru yang memungkinkan string diterjemahkan menurut

locale saat ini. Locale dapat pula dirubah, sehingga pesan shell dapat bersifat language-spesific.

Fasilitas pengeditan perintah baris memungkinkan input karakter delapan-bit, sehingga kebanyakan

keluarga set karakter ISO-8859 didukung.