Anda di halaman 1dari 13

BAB I

PENDAHULUAN

1.1 Latar Belakang

Teknik Kompilasi merupakan teknik untuk melakukan pembacaan suatu source


program yang ditulis dalam bahasa sumber, misalnya Pascal, kemudian
diterjemahkan ke dalam suatu bahasa lain yang disebut bahasa sasaran atau bentuk
yang dapat dieksekusi secara langsung dari sistem operasi yang tersedia dalam
suatu komputer. Teknik tersebut diimplementasikan dalam suatu perangkat lunak
(software) yang disebut Compiler.

Istilah Compiler muncul karena dulu ada program yang menggunakan subrutin-
subrutin atau pustaka-pustaka untuk keperluan yang sangat khusus yang
dikumpulkan menjadi satu sehingga diistilahkan compiled.

Bahasa program merupakan suatu wahana untuk menuangkan pikiran manusia


yang dapat dimengerti oleh mesin komputer sehingga bernilai guna. Suatu bahasa
program akan terikat aturan dari paradigma bahasa. Ada berbagai macam
paradigma bahasa : Prosedural, Fungsional, Deklaratif, Object Oriented, Konkuren.
Paradigma yang diajarkan dalam Mata kuliah Algoritma dan Pemrograman ini
adalah paradigma prosedural.

Belajar bahasa program hanya belajar tentang sintak (aturan) dari bahasa
sedangkan belajar memprogram akan tercakup beberapa hal yang didalamnya
terkandung tentang belajar bahasa program itu sendiri.

1.2 Rumusan Masalah

1. Apa itu Analisis Sintaks ?


2. Apa saja tugas-tugas dari Analisis Sintaks?
3. Apa yang dimaksud dengan Tata Bahasa Bebas Konteks?
4. Apa yang dimaksud dengan Pohon Sintaks?
5. Apa itu Eror Hadling?
6. Apa yang dimaksud dengan Metode Parsing?

1.3 Tujuan

Tujuan dalam penulisan makalah ini adalah untuk mengetahui analisis sintaks
secara meluas agar dapat membantu mahasiswa dalam pembuatan sebuah
program dengan menggunakan bahasa pemograman.
BAB II
PEMBAHASAN

2.1 Analisis Sintak (Parser)

Analisis Sintaktik bergantung pada bahasa pemrograman masing-masing.


Karena setiap bahasa pemrograman memiliki betuk sintaks yang berbeda-beda.
Analisis Sintaktik memiliki input yang berupa token yang berasal dari scanner dan
source code.

Analisis Sintaktik/Analisis Hirarki/Parsing adalah bagian kedua dari compiler


yang bertugas memeriksa kebenaran dan urutan dari token-token yang terbentuk
oleh analisis leksikal. 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. Sebelum akhirnya kode eksekusi benar-benar dihasilkan.

2.2 Tugas-Tugas Analisis Sintaktik

Tugas dari Analisis Sintaktik adalah :

1. Pengelompokkan token-token ke dalam class sintaks (bentuk sintaks),


seperti procedure, statement, dan expression.
2. Grammar adalah sekumpulan aturan-aturan, untuk mendefinisikan
bahasa sumber. Grammar dipakai oleh analisis sintaktik untuk
menentukan struktur dari program sumber.
Definisi formal dari grammar (T,N,S,R) :
 T : Himpunan simbol terminal
 N : Himpunan simbol non terminal
 S : Simbol awal yang unik, SeN
 R : Himpunan produksi dengan bentuk alpha  betha, dimana
alpha dan betha adalah kumpulan simbol non terminal dan terminal
3. Proses pendeteksiannya (pengenalan token) disebut dengan parsing
maka analisis sintaktik sering disebut dengan parser.
4. Pohon sintaks yang dihasilkan digunakan untuk analisis semantik yang
bertugas untuk menentukan ‘maksud’ dari program sumber, misalnya
operator penjumlahan maka analisis semantik akan mengambil aksi apa
yang harus dilakukan.

2.3 Tata Bahasa Bebas Konteks

CFG (Context Free Grammar) atau Bahasa bebas konteks adalah sebuah
tata bahasa dimana tidak terdapat pembatasan pada hasil produksinya, contoh pada
aturan produksi :

ab

batasannya hanyalah ruas kiri (a) adalah sebuah simbol variabel. Sedangkan
contoh aturan produksi yang termasuk CFG adalah :

B  CdeFg

D  BcDe

Sebuah tata bahasa bebas konteks adalah suatu cara yang menunjukkan
bagaimana menghasilkan untai-untai dalam sebuah bahasa. Bahasa bebas konteks
menjadi dasar dalam pembentukan suatu parser/proses analisis sintaktik. Bagian
sintaks dalam suatu kompilator kebanyakan didefinisikan dalam tata bahasa bebas
konteks.
2.4 Pohon Sintaks

Pohon sintaks/pohon penurunan berguna untuk menggambarkan bagaimana


memperoleh suatu string dengan cara menurunkan simbol-simbol variabel menjadi
simbol-simbol terminal. Setiap simbol variabel akan diturunkan menjadi simbol-
simbol terminal, sampai tidak ada yang belum tergantikan.

Sebuah pohon (tree) adalah suatu graph terhubung tidak sirkuler, yang
memiliki satu simpul (node)/vortex yang disebut akar (root) dan dari situ memiliki
lintasan ke setiap simpul.

Misalkan sebuah tata bahasa bebas konteks memiliki aturan produksi sebagai
berikut:

S  aB | bA

A  a | aS | bAA

B  b | bS | aBB

Pohon penurunan untuk memperoleh aaabbabbba adalah :


S

a B

a B B

a B B b S

b b S b A

a B a

Proses penurunan atau parsing bisa dilakukan dengan cara sebagai berikut :
1 Penurunan Terkiri (leftmost derivation) : simbol variabel yang paling kiri
yang diturunkan terlebih dahulu.
2 Penurunan Terkanan (rightmost derivation) : simbol variabel yang paling
kanan yang diturunkan terlebih dahulu.

Contoh :

Ingin dihasilkan string aabbaa dari :

S  aAS | a
A  SbA | ba

Penurunan kiri : S => aAS => aSbAS => aabAS => aabbaS => aabbaa

Penurunan kanan : S => aAS => aAa => aSbAa => aSbbaa => aabbaa

2.5 Error Handling

Error handling (penanganan kesalahan) adalah suatu bagian penting pada


sebuah kompiler modern. Kompiler dengan kemampuan error handling yang tidak
baik tidak akan diterima oleh pengguna, bahkan walaupun itu dapat menghasilkan
kode yang benar untuk program yang baik sekalipun. Tantangan yang paling besar
disini adalah menebak kesalahan yang mungkin dilakukan programmer dan datang
dengan cara menunjukan kesalahan itu secara tepat serta caranya yang tidak lebih
dari satu. Ini seharusnya menjadi catatan bagi para perancang bahasa yang tidak
menyediakan informasi tentang kesalahan, ini adalah tugas bagi para perancang
compiler untuk menyediakan ini. Secara umum terjadiny kesalahan (error) dalam
suatu program dapat diklasifikasikan dalam empat kategori sebagai berikut :

1. Lexical error- Ini merupakan kesalahan yang utamanya terletak pada


kesalahan ejaan dan kebetulan masukannya berupa istilah asing. Sebagai
contoh ‘$’, jika bahasa yang digunakan tidak sesuai dengan itu.
Kesalahan ini kebanyakan tertangkap oleh Lexical analyzer.
2. Syntatic error- Ini merupakan kesalahan tata bahasa, seperti tidak sesuainya
tanda kurung pada tampilan aritmatika, penyususunan ill-formed, dll.
Kesalahan ini sering terjadi pada program. Sebuah parser seharusnya
mampu untuk menangkap adanya kesalahan dengn efisien.
3. Semantic error – Ini merupakan kesalahan yang disebabkan oleh variable
underfined, tidak sesuainya operands dan operator, dll. Kesalahan ini bisa
ditangkap lewat pengenalan beberapa pengujian ekstra
selama parsing (penguraian).
4. Logical error – Ini merupakan kesalahan seperti tak terbatasnya loop
(perulangan). Di sini tidak ada jalan lain untuk mengetahui adanya
kesalahan logika secara otomatis. Bagaimanapun, melakukan debugging
mungkin dapat membantu programmer untuk mengetahui adanya kesalahan
.

Dengan demikian, sebuah tantangan yang penting dari tahap analysis syntax ini
adalah untuk mendeteksi kesalahn syntax. Bagaimanapun tidak seorangpun
menyukai compiler yang berhenti setelah pendeteksian kesalahan pertama karena
mungkin masih banyak kesalahan yang ada. Jika semua atau sebagian besar
kesalahan dapat dilaporkan ke pengguna dalam satu waktu, pengguna dapat
memeriksanya dan mengiririm kembali untuk dikompilasi. Laporan suatu kesalahan
pada suatu waktu dibutuhkan iterasi dalam jumlah yang besar. Tetapi, pada
sebagian besar bentuk, adanya kesalahan pada aliran input menjadi ujung dari
sebuah parser untuk sebuah keadaan erroneous, dari sini tidak dapat melakukan
pemmrosesan lebih jauh sebelum pekerjaan ini dibatalkan. Caranya terlibat dalam
pemrosesan Strategi ini melibatkan proses pengetahuan secara luas sebagai
error-recovery strategies.

Yang membedakan dari strategi recovery, disebutkan dengan baik sebagai berikut:

1. Panic mode
2. Phrase level
3. Error production
4. Global correction

1. Panic mode recovery


Dalam bentuk ini, parser mengesampingkan jumlah token yang cukup untuk
dicapai dalam sebuah kedaan turun pada sebuah pendeteksian kesalahan.
Satu set token menandai pada akhir konstruksi bahasa yang didefinisikan
untuk membuat sebuah synchronizing set. Sebagai contoh yang identik pada
sinkronisasi token adalah semicolon, closing brace, end, dll, yang mana
sering digunakan untuk mengakhiri kalimat atau mengeblock. Teknik ini
termasuk efektif karena setiap parser memperhatikan sebuah sinkronosasi
token, dan dampaknya sebelum kesalahan syntax terjadi sanagat besar
kemungkinan dapat dilampaui. Walaupun, itu akan melewatkan sedikit
banyak token dalam sebuah proses, yang mungkin mengenali beberapa
kesalahan yang tidak asli lagi.

2. Phrase level recovery.

Dalam bentuk ini, parser membuat koreksi local dari input untuk mendeteksi
kesalahan. Jadi, hasil keluaran input memberikan susunan bahasa yang baik.
Sebagai contoh dalam kategori ini termasuk mengganti koma dengan
semicolon, menyelipkan karakter yang hilang, dst. Bagaimanapun juga,
menyelipkan karakter baru dapat terselesaikan dengan baik sehimgga
kesalahan yang asing tidak dikenali dan juga penguraian algoritma dapat
diproses tanpa masalah.

3. Error production.
Meliputi modifikasi pada susunan bahasa yang mengandung keadaan error.
Dalam bentuk ini , compiler mendesain sebuah ide yang sangat baik tentang
tipe error yang mungkin terjadi sehingga dia dapat memodifikasi susunan
bahasa yang tidak sesuai. Adanya kesalahan input program disini, error
production akan membuat penambahan sehingga tercipta kesesuaaian pada
susunan bahasa yang baru. Global correction. Ini merupakan bentuk yang
hampir mendekati bentuk teoritikal. Masalahnya, disini dapat menjadi sebuah
keadaan yang mengikuti :
Memberikan aliran input x yang tidak benar pada sebuah grammar G,
menemukan aliran input lain berupa y yang bisa diterima oleh G, sehingga
jumlah token yang menjadi berubah untuk diganti dari x ke y adalah
minimum.
Untuk mendekati keadaan yang digambarkan diatas membutuhkan
biaya yang sangat mahal, dan untuk membuat program melalui cara error
recovery mungkin tidak menjadi apa yang dpikirkan programmer pada
awalnya.
Sebelum lanjut ke pembahasan berikutnya pada parser, kita
membutuhkan pengetahuan konsep yang sedikit mendasar dan cara
penulisan yang digunakan untuk menggambarkan grammar (susunan
bahasa).

2.6 Metode Parsing

Metode Parsing perlu memperhatikan 3 hal, yaitu waktu eksekusi,


penanganan masalah, dan penanganan kode. Berdasarkan metodenya, Parsing
digolongkan menjadi :

 Top-Down
Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal,
metode ini meliputi :
Backtrack/backup : Brute Force
No Backtrack : Recursive Descent Parser
 Bottom-Up
Metode ini melakukan penelusuran dari leaf ke root

Contoh :
S  aABe
A  Abc | b
Bd

Maka untuk string abbcde

Abbcde => aAbcde => aAde => aABe => S

Parsing : BRUTE FORCE

 Memilih aturan produksi mulai dari kiri


 Mengexpand simbol non terminal sampai pada simbol terminal
 Bila terjadi kesalahan (string tidak sesuai) maka akan dilakukan backtrack
 Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara
mencoba segala kemungkinan untuk setiap simbol non-terminal
 Contoh suatu bahasa dengan aturan produksi sebagai berikut :
S  aAd | aB
Ab|c
B  ccd | ddc
Misal ingin dilakukan parsing untuk string addc
(i) S (ii) S (iii) S

a A d a A d

b
Terjadi kegagalan (iii), dilakukan backtrack
(iv) S (v) S (vi) S

a A d a B a B

c c c d
Terjadi kegagalan lagi (v), dilakukan backtrack

Kelemahan Metode BRUTE FORCE :

 Mencoba untuk semua aturan produksi yang ada sehingga waktu eksekusi
menjadi lambat
 Mengalami kesukaran untuk melakukan pembetulan kesalahan
 Banyak memakan memori, karena membuat backup lokasi backtrack
 Grammar yang memiliki rekursif kiri, tidak bisa diperiksa karena akan
memngalami loop yang terus menerus. Sehingga rekursif kiri harus diubah
terlebih dahulu.
 Kalaupun tidak mungkin menghilangkan rekursif kiri dalam penyusunan
aturan produksi maka produksi rekursif kiri diletakkan pada bagian belakang
atau terkanan, hal ini untuk menghindari looping pada awal proses parsing.
 Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang
sedikit.

Parsing : RECURSIVE DESCENT PARSER

 Salah satu cara untuk mengaplikasikan bahasa bebas konteks


 Simbol terminal maupun simbol variabelnya bukan sebuah karakter
 Besaran leksikal sebagai simbol terminalnya, besaran sintaks sebagai simbol
variabelnya/non-terminalnya
 Dengan cara penurunan secara rekursif untuk semua variabel dari awal
sampai ketemu terminal
 Tidak pernah mengambil token secara mundur (backtracking)
 Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing
BAB III

PENUTUP

3.1 Kesimpulan

Bahasa program merupakan suatu wahana untuk menuangkan pikiran manusia


yang dapat dimengerti oleh mesin komputer sehingga bernilai guna. Suatu bahasa
program akan terikat aturan dari paradigma bahasa. Ada berbagai macam
paradigma bahasa : Prosedural, Fungsional, Deklaratif, Object Oriented, Konkuren.

Analisis Sintaks adalah bagian kedua dari compiler yang bertugas memeriksa
kebenaran dan urutan dari token-token yang terbentuk oleh analisis leksikal. Dalam
tahap ini karakter atau token yang diperoleh pada analisis leksikal disusun dan
dikelompokkan dalam suatu hirarki tertentu yang secara keseluruhan mempunyai
arti tertentu.

Analisis Sintaks memiliki tugas-tugas seperti, pengelompokkan token-token ke


dalam class sintaks (bentuk sintaks), seperti procedure, statement, dan expression,
Grammar, Proses pendeteksiannya (pengenalan token) disebut dengan parsing
maka analisis sintaktik sering disebut dengan parser, dan Pohon sintaks yang
dihasilkan digunakan untuk analisis semantik yang bertugas untuk menentukan
‘maksud’ dari program sumber, misalnya operator penjumlahan maka analisis
semantik akan mengambil aksi apa yang harus dilakukan.
DAFTAR PUSTAKA

http://ifengineer07.wordpress.com/2009/07/09/bab-iii-syntax-analysis/ di akses 25/11/13 7.15


PM

https://www.scribd.com/doc/189972713/Teknik-Kompilasi

Anda mungkin juga menyukai