Anda di halaman 1dari 8

PERANCANGAN BAHASA PEMROGRAMAN BERNOTASI PREFIX

Amzar Zikri
Jurusan Teknik Informatika
Fakultas Tekniki, Universitas Malikussaleh
Jl. Kampus Unimal Bukit Indah, Blangpulo, Muara Satu, Kabupaten
Aceh Utara, Aceh
Email: amzarzikri@gmal.com

ABSTRAK

Bahasa pemrograman merupakan alat yang dipergunakan programmer untuk


mengimplementasikan algoritma. Salah satu elemen penting dari bahasa
pemrograman adalah syntax. Desain syntax yang tidak konsisten dan kurangnya
pengetahuan programmer dapat menimbulkan keambiguan dalam penulisan kode.
Salah satu cara mengurangi keambiguan adalah dengan konsistensi penggunaan
notasi prefix untuk setiap statement.
Oleh karena alasan-alasan tersebut, penelitian ini menawarkan bahasa
pemrograman baru yang diimplementasikan sebagai interpreter. Tujuan bahasa
pemrograman ini adalah untuk membantu programmer mengekspresikan algoritma
dalam membuat program sederhana.. Bahasa pemrograman ini dibuat menggunakan
C++.
Dari hasil pengujian, dapat disimpulkan bahwa bahasa pemrograman ini telah
mampu melakukan analisa leksikal dan syntax secara keseluruhan terlebih dahulu,
sebelum melakukan proses eksekusi, sehingga dapat mengurangi runtime error.
Kata Kunci: Bahasa Pemrograman, Interpreter, Notasi Prefix.

1. PENDAHULUAN pemrograman yang menggunakan notasi


Bahasa pemrograman merupakan ini adalah Lisp.
alat yang sangat penting bagi programmer Kelemahan dari notasi infix adalah
untuk mengimplementasikan algoritma. membutuhkan tanda kurung dan analisis
Tiap bahasa pemrograman memiliki formula dibutuhkan terlebih dahulu untuk
kelebihan dan kekurangan tersendiri, dan menentukan bagian mana yang dikerjakan
programmer memiliki preferensi tersendiri terlebih dahulu. Kelebihan notasi prefix
dalam memilih suatu bahasa pemrograman. adalah tidak membutuhkan tanda kurung
Beberapa faktor penting seseorang dalam dan kejelasan dalam hirarki, karena tree
memilih bahasa pemrograman adalah operasi dapat dibentuk dengan mem-parse
syntax, editor, dokumentasi, performa, dari sebelah kiri sehingga dapat
library, fleksibilitas, komunitas dan mempermudah analisis syntax.
popularitas. 2. TINJAUAN PUSTAKA
Dalam hal syntax, terdapat tiga Notasi Sintaks - Prefix
macam notasi, yaitu infix, prefix dan Pemanggilan fungsi biasanya
postfix. Notasi infix merupakan notasi yang ditulis dengan notasi ini. Dalam notasi ini
umum untuk ekspresi matematika, dimana operator ditulis sebelum operand, sehingga
proses atau operator diletakkan diantara dapat memberitahu jumlah dan argumen
subyek dan obyek, contoh bahasa apa saja yang dibutuhkan, sehingga tidak
pemrograman yang menggunakan notasi menimbulkan ambiguitas. Selain itu, tidak
ini adalah C++. Notasi prefix adalah notasi dibutuhkan tanda kurung untuk
yang umum bagi komputer, dimana proses mengevaluasi suatu ekspresi. Kelebihan
atau operator diletakkan di awal, disertai lain dari notasi ini adalah mudah untuk
subyek dan obyek, contoh bahasa
dievalusi dengan bantuan stack. Notasi ini pengkodean lain diantaranya yang terkenal
sering juga disebut polish notation. adalah Unicode.
Programming Language Creation Syntax Diagram
Process Syntax Diagram merupakan salah satu cara
Lexical Analysis untuk mempresentasikan syntax atau token
Analisis leksikal adalah suatu dalam bentuk gambar. Beberapa cara yang
proses mengklasifikasikan urutan karakter lain untuk mempresentasikan syntax suatu
tertentu menjadi sebuah token. Token bahasa adalah dengan Backus-Naur Form.
adalah blok karakter yang memiliki Bentuk dari syntax diagram ini adalah
kategori. Misalnya token untuk digit kotak untuk mempresentasikan suatu
bilangan bulat adalah angka berapapun elemen, elips untuk mempresentasikan
dengan panjang minimal 1 karakter. karakter atau kumpulan karakter, serta
Analisis leksikal merupakan sub proses panah untuk mempresentasikan
dari analisis syntax. Masukan dari proses kemungkinan literal berikutnya.
ini adalah source code dan definisi token, 3. METODE PENELITIAN
sedangkan keluarannya adalah daftar Adapun metode yang digunakan dalam
token. penelitian ini adalah:
Syntax Analysis (Parsing) 1. Desain struktur file dan elemen-
Analisis syntax adalah suatu proses elemen token – menentukan
membentuk struktur tree dari token-token struktur file, elemen-elemen
yang ada. Syntax adalah deskripsi terkecil dalam pembentukan
mengenai urutan token yang valid dalam statement, comment dan block
struktur source code program. Masukan sebuah bahasa pemrograman.
dari proses ini adalah daftar token dan 2. Desain struktur data dan literal –
definisi syntax, sedangkan keluarannya menentukan struktu data apa saja
adalah parse tree atau syntax tree. yang didukung dalam bahasa
Code generation pemrograman beserta literalnya.
Pembangkitan kode merupakan 3. Desain syntax – menentukan
proses terpenting dalam pembuatan struktur syntax sebuah statement
interpreter atau compiler, pada proses dan block dalam bahasa
inilah syntax tree diubah menjadi kode pemrograman.
yang dapat dieksekusi komputer (Aho, 4. Desain tokenizer dan parser –
Sethi & Ullrnan, 2001). mengimplementasikan desain-
Syntax Representation desain tersebut di atas sebagai
Sebuah sintaks dapat program yang mampu
dideskripsikan dalam beberapa cara, menghasilkan syntax tree.
melalui teks dengan pengkodean tertentu 5. Desain struktur data interpreter –
dengan aturan tertentu ataupun melalui mengimplementasikan
gambar, misalnya dengan syntax diagram. penyimpanan data sesungguhnya
Berikut ini penjelasan hal-hal yang dalam interpreter.
berhubungan dengan presentasi suatu 6. Desain algoritma interpreter –
sintkas. mengimplementasikan fungsi-
ASCII Character Encoding fungsi yang didukung dan proses
ASCII merupakan singkatan dari eksekusi interpreter.
American Standard Code for Information
Interchange. Pengkodean karakter 4. PEMBAHASAN
merupakan salah satu cara untuk
mempresentasikan bahasa literal manusia File Structure Design
ke dalam komputer. Terdapat banyak Struktur file adalah bagian-bagian
yang dibutuhkan dalam membuat file
source code yang valid. Memiliki Memiliki arti bahwa tipe data baru
struktur sebagai berikut: bernama ”ListOfString” adalah gabungan
tipe data linked list yang memiliki tipe
string.
Variable Initialization Section merupakan
Gambar 1. File Structure bagian file untuk menginisialisasi variabel
lokal file.
Header Section merupakan bagian file Contoh:
untuk menandakan tipe dan versi dari file VAR:STRING:InitEmpty a
source code tersebut. Memiliki arti bahwa variabel bernama “a”
Contoh: akan diinisialisasikan sebagai tipe data
PROGRAM +1 string dengan prosedur inisialisasi
Memiliki arti bahwa file source code ”InitEmpty”.
tersebut adalah file program, memiliki VAR:INT32:InitValue [ b c d ] +3
versi 1. Memiliki arti bahwa variabel bernama ”b”,
LIBRARY +0.004 ”c” dan ”d” akan diinisialisasikan sebagai
Memiliki arti bahwa file source code tipe data integer 32-bit dengan prosedur
tersebut adalah file library, memiliki versi inisialisasi ”InitValue” dengan parameter
0.004. +3.
Method Declaration Section merupakan
Dependency Section merupakan bagian file bagian file untuk mendeklarasikan sebuah
untuk menyertakan penggunaan file lain di method (fungsi atau prosedur).
dalam file tersebut. File terserbut dapat Contoh:
memiliki 2 jenis penggunaan yaitu require PROC:Main [ ] [ ] [ ]
(relasi dependensi) dan inherit (relasi Memiliki arti bahwa prosedur bernama
penurunan). “Main” akan dibuat dengan parameter
Contoh: kosong, variabel lokal prosedur
INHERIT:RELATIVE “data” kosong dan tidak memiliki isi.
Memiliki arti bahwa file yang akan FUNC:STRING:Isi
[
digunakan sebagai parent turunan terletak ]
relatif terhadap file sumber, dan memiliki b]
[ VAR:STRING:InitEmpty [ a
nama file “data.esl”. ]
REQUIRE:ABSOLUTE [ “data1” “data2” ] [
Memiliki arti bahwa file yang akan STRING:Reset a “isi”
]
digunakan sebagai dependensi terletak Memiliki arti bahwa fungsi bernama
secara absolut dari file interpreter, dan “Isi” akan dibuat dengan parameter
memiliki lokasi file di dalam folder kosong, variabel lokal prosedur “a”
”data1” dan memiliki nama file dan “b”, dan memiliki isi mengisi
”data2.esl”. variabel “a” dengan string “isi”.
Contoh struktur file secara
Alias Section merupakan bagian file untuk keseluruhan:
mengkombinasikan beberapa tipe data PROGRAM +1
menjadi sebuah tipe data, salah satu [ INHERIT:RELATIVE “data”
REQUIRE:ABSOLUTE [
contohnya adalah array of string. “data1” “data2” ]
Contoh: ]
VEC1:VectorOfInteger INT32 [ VEC1:VectorOfInteger
INT32
Memiliki arti bahwa tipe data baru ]
bernama ”VectorOfInteger” adalah [ VAR:INT32:InitValue [ b
c d ] +3
gabungan tipe data vector (array) yang ]
memiliki tipe integer 32-bit. [ PROC:Main [ ] [ ]
LIST:ListOfString STRING [ STRING:Reset a
“nilai baru”
]

84 Perancangan Bahasa Pemrograman


(Yulia)
]
simbol “~” dan diakhiri penanda akhir
Syntax Structure Design baris. Literal merupakan text yang
Struktur syntax dalam bahasa digunakan programmer dalam
pemrograman ini menggunakan notasi mendeskripsikan nilai sebuah tipe data
prefix secara menyeluruh, dengan dalam source code. Terdapat 3 jenis
sedikit pengecualian untuk syntax string literal yang memiliki arti sama,
yang memiliki parameter dengan yaitu menuliskan isi string tersebut di
jumlah tak tentu. Apabila sebuah dalam pasangan simbol “'”, '”', dan “`”.
sebuah syntax memiliki parameter Untuk penulisan integer literal, tiap
dengan jumlah tidak tentu, maka akan angka harus diawali dengan tanda
diawali simbol “[“ dan diakhiri simbol positif atau negatif dan diikuti 1 atau
“]”. lebih angka. Untuk penulisan numeral
Process Call Statement literal dijelaskan dalam Gambar 2
merupakan syntax untuk memanggil
sebuah method. Setiap pemanggilan
method memiliki awalan berupa tipe
data pemilik method tersebut. Tanda
“:” memiliki arti bahwa identifier di
sebelah kanan adalah bagian dari
identifier di sebelah kiri. berikut ini.
Contoh: Gambar 2. Numeral Literal
STRING:ResetConcat a [ “isi” b
c]
Memiliki arti bahwa prosedur bernama Data Structure Design
“ResetConcat” merupakan prosedur Terdapat 5 jenis tipe data dalam bahasa
milik tipe data string, proses yang pemrograman ini, yaitu:
dijalankan adalah menggabungkan Basic Data Types adalah tipe
string “isi” serta nilai variabel “b” dan data dasar yang dapat dideklarasikan
“c” dan memasukkannya ke dalam secara langsung. Tipe data ini
variabel “a”. meliputi: STRING merupakan tipe
INT32:SquareRoot b data yang menyimpan rangkaian
Memiliki arti bahwa fungsi bernama karakter. BYTE, INT16, INT32, dan
“SquareRoot” merupakan fungsi milik INT64 merupakan tipe data yang
tipe data integer 32-bit, proses yang menyimpan bilangan integer. Memiliki
dijalankan adalah mengembalikan nilai tambahan berupa huruf U di depan
dari akar kuadrat variabel “b”. masing-masing tipe sebagai penanda
Lexical Structure Design angka positif. FLOAT32 dan
Struktur leksikal merupakan FLOAT64 merupakan tipe data yang
elemen terkecil dalam pembentukan menyimpan bilangan real. BOOL
sebuah token. Sebuah identifier harus merupakan tipe data yang
dimulai dengan huruf, dan boleh menyimpan data biner atau boolean.
diakhiri dengan huruf atau angka. ANY merupakan tipe data khusus
Spasi kosong dan komentar tidak yang tidak dapat dideklarasikan,
diikutkan dalam prosess interpreter. karena tidak memiliki prosedur
Terdapat 3 jenis komentar, yaitu inisialisasi, tetapi dapat digunakan
komentar dokumentasi yang dimulai untuk penanda struktur kontrol.
simbol “{“ dan diakhir simbol “}”, Container Data Type adalah
komentar biasa yang dimulai dengan struktur data dasar. Tipe data ini tidak
simbol “(“ dan diakhiri simbol “)”, dan dapat dideklarasikan, kecuali dengan
komentar baris, yang dimulai dengan menggabungkannya dengan basic data
type menjadi sebuah alias data type

85 Perancangan Bahasa Pemrograman


(Yulia)
Proceeding, Seminar Ilmiah Nasional Komputer dan Sistem Intelijen (KOMMIT 2008)
Auditorium Universitas Gunadarma, Depok, 20-21 Agustus 2008 ISSN : 1411-6286

atau tipe data baru. Tipe data ini merupakan perbandingan method yang
meliputi: VEC merupakan singkatan dimiliki tipe data integer.
dari vector, adalah struktur data yang Tabel 1.
dapat menyimpan nol atau lebih data Perbandingan method yang dimiliki tipe data
dengan jenis yang sama. Berbeda integer
dengan array, ukuran vector dapat
berubah. Perbedaan VEC1 dan VEC2
terletak pada kecepatan runtime saat
perubahan jumlah data, dimana VEC2
cepat pada kedua sisi sedangkan VEC1
hanya cepat pada satu sisi. SET1 dan
SET2 merupakan struktur data
menyerupai vector, tetapi data yang
masuk selalu diurutkan. Angka 1
dalam SET1 memiliki arti single, yang
artinya data tidak boleh kembar,
sedangkan 2 memiliki arti multi.
MAP1 dan MAP2 merupakan struktur
data menyerupai gabungan set dan
vector, tetapi indeks dari tipe data ini
tidak harus berupa bilangan cacah.
LIST merupakan struktur data
menyerupai vector, tetapi tidak dapat
diindeks. Diimplementasikan dengan
C++ list.
Extended Data Type adalah tipe
data yang dapat dideklarasikan. Pengujian Analisis Leksikal
Merupakan tipe data gabungan yang Pengujian analisis leksikal dilakukan
memiliki variabel dan fungsi di dengan memberikan source code yang
dalamnya. secara leksikal tidak lengkap atau salah.
Alias Data Type adalah tipe Berikut ini adalah contoh source code yang
data yang dapat dideklarasikan. salah beserta output-nya. Kesalahan terjadi
Merupakan hasil penggabungan tipe karena terdapat kurung siku kiri yang lebih
data container dengan basic atau banyak dari kurung siku kanan. Segmen 1
extended. dan 2 berikut ini adalah source code dan
Declarable Data Type meliputi hasil interpretasi pengujian ini.
basic data type, extended data type dan
alias data type. Segmen 1.
Contoh Source Code Brace Overflow
Hasil Pengujian
Bahasa pemrograman ini dapat PROGRAM +1 [ ] [ ] [ ] [ ] [
mengenali 188 jenis error dan 7 jenis
warning, misalnya:
f il e open fa il ed , unknow n ex t ens i on , so l u t i on Segmen 2.
i ns i de so l u t i on , i nva li d cha rac t e r f o r iden t i f Output Source Code Brace Overflow
i e r t oken
eo f f ound be f o re i den t i f i e r end , t oo many r i LEXERERROR : E8 t oo many le f t b r ace 315
gh t b r ace dan la i n - l a i n I NFO :131 PROJECT ERROR
E14 l ex
: ica l ana l yze r
Bahasa pemrograman ini mampu
menjalankan 620 method. Tabel berikut ini f a il ed , comp il a t i on ha l t ed
I NFO :F : / K i z / P r o j ec t s / TA / P ro j ec t/eGaO /Tes t Case
Token i ze r Repo r tRoo t : 5 / 1B r ace : 5 ( 5 )

86 Perancangan Bahasa Pemrograman


(Yulia)
Proceeding, Seminar Ilmiah Nasional Komputer dan Sistem Intelijen (KOMMIT 2008)
Auditorium Universitas Gunadarma, Depok, 20-21 Agustus 2008 ISSN : 1411-6286

S i ze : 11 Segmen dan 5.20 berikut ini adalah source


PROG RA M 1 1 9 9 ` I DE `
c o de dan hasil
2 interpretasi
1 11 pengujian
11 `NUMini.
` 1
3 1 13 13 `[ ` +1
4 1 15 15 ` ]` -1 Segmen 5.
5 1 17 17 `[ ` +2 Contoh Source Code Main Procedure Not Found
6 1 19 19 ` ]` -2
7 1 21 21 `[ ` +3
8 1 23 23 ` ]` -3 PROGRAM +1 [ ] [ ] [ ] [ ]
9 1 25 25 `[ ` +4
10 1 27 27 ` ]` -4 Segmen 6.
11 1 29 29 `[ ` +5 Output Source Code Main Procedure Not Found

EXEC ERROR : E182 ma i n p r ocedu re no t


E rr o r Coun t: 1 f ound
I NFO :F : /K i z /P r o j ec t s / TA / P r o j ec t/ eGaO / Tes t Ca
Pengujian Analisis Syntax PROJECT ERROR :E181 i n t e r p r e ta t i on f a il ed
I NFO :F : /K i z /P r o j ec t s / TA / P r o j ec t/ eGaO / Tes t Ca
Pengujian analisis syntax dilakukan dengan E rr o r Coun t: 1
memberikan source code yang secara
syntax tidak lengkap atau salah. Berikut ini
adalah contoh source code yang salah
beserta output-nya. Dalam source code ini,
kesalahan terjadi karena prosedur bernama Evaluasi
Concatenate tidak ditemukan pada tipe  Tingkat readability relatif
data STRING, seharusnya menggunakan menengah berdasarkan hasil
ConcatOf. Segmen 3 dan 4 berikut ini kuisioner dengan rata-rata
adalah source code dan hasil interpretasi pemahaman 58,91 %
pengujian ini.  Faktor writability bahasa
Segmen 3.
pemrograman ini relatif rendah,
Contoh Source Code Procedure Name Not Found
karena bentuk syntax yang kurang
PROGRAM +12 . 3 [ ] [ ] [ ] fleksibel dibandingkan C++
[  Reliability bahasa
PROC : Ma i n [ ] [ ] pemrograman ini tergolong
[
STR I NG :P r i n t L i ne rendah
STR I NG : Conca t ena t e " a "  Faktor writability bahasa
]
] pemrograman ini relatif rendah,
karena bentuk syntax yang kurang
fleksibel dibandingkan C++
Segmen 4.
Output Source Code Procedure Name Not Found 5. KESIMPULAN
PARSER ERROR : E159 f unc t i on name no
t i n bas i c t ype Bahasa pemrograman yang dibuat
I NFO : Pos : 6 30 117 Type : ` I DE ` dalam penelitian ini tidak menggunakan
Da t a : Conca t ena t e
PARSER ERROR : E83 f unc t i on pa r ame t sistem read-eval-print, sehingga
e r i nva l id mengurangi jumlah runtime error dan
I NFO : Ma i n P r i n t L ine
PROJECT ERROR : E20 me t hod de f i n i t i proses eksekusi yang tidak perlu.
on sec t i on syn t ax ana l yze r f a il ed , comp il a t ion ha l t ed Bahasa pemrograman ini telah
I NFO : F : / K i z / P r o j ec t s / TA / P ro j ec
t/eGaO /Tes t Case / pengu j i an -syn t ax - p r ocedu mampu melakukan analisa leksikal dan syntax
renameno tf ound . esp secara keseluruhan terlebih dahulu, sebelum
melakukan proses eksekusi, sehingga dapat
E rr o r Coun t: 1
mengurangi runtime error.
Pengujian Runtime Error Bahasa pemrograman ini memiliki
readability relatif menengah, writability
Berikut ini adalah contoh source code yang dan reliability rendah, dan cost yang tinggi.
salah, karena tidak terdapat prosedur main.

87 Perancangan Bahasa Pemrograman


(Yulia)
Proceeding, Seminar Ilmiah Nasional Komputer dan Sistem Intelijen (KOMMIT 2008)
Auditorium Universitas Gunadarma, Depok, 20-21 Agustus 2008 ISSN : 1411-6286

Diharapkan bahasa pemrograman


ini dapat dikembangkan lebih lanjut
dengan desain yang lebih baik serta
menggabungkannya ke dalam sebuah
integrated development environment.

DAFTAR PUSTAKA
[1] Aho, Alfred V., Sethi, Ravi and
Ullrnan, J. D. 2001. Compilers:
Principles, techniques, and tools.
Massachussetts: Addison-Wesley.
[2] Introduction to programming using
Python. 2008. 25 Juni 2008,
http://www.pasteur.fr/formation/inf
obio/python/ch05s02.html
[3] Jinks, Pete. (n.d.). Notations for
context-free grammars. 28 Mei
2008,
http://www.cs.man.ac.uk/~pjj/bnf/b
nf.html
[4] Joung , Yuh-Jzer. (n.d.). Syntatic
structure. 28 Mei 2008,
http://joung.im.ntu.edu.tw/teaching/
pl/2001/syntatic_structure.pdf
[5] Kayabasi, Alp. (n.d.). Prefix
notation. 28 Mei 2008,
http://triton.towson.edu/~akayabas/
COSC455_Spring2000/Prefix.html
[6] Sebesta, R. W. 2006. Concepts of
programming language (7th
edition). Boston: Addison-Wesley.
[7] Stroustrup, Bjarne. (n.d.). C++
programming language. 28 Mei
2008,
http://www.research.att.com/~bs/C
++.html
[8] TJ CompSci. (n.d.). 28 Mei 2008,
http://academics.tjhsst.edu/compsci
/CS2C/U3/syndiag.html

88 Perancangan Bahasa Pemrograman


(Yulia)
Proceeding, Seminar Ilmiah Nasional Komputer dan Sistem Intelijen (KOMMIT 2008)
Auditorium Universitas Gunadarma, Depok, 20-21 Agustus 2008 ISSN : 1411-6286
View publication stats

Anda mungkin juga menyukai