Jumat, 02 November 2018

ANALIS SEMANTIK

↬ANALIS SEMANTIK↫

     A.  Pengertian Semantik
Kata semantik dalam bahasa Indonesia, berasal dari bahasa Yunani, yaitu sema (kata benda), yang berarti “tanda” atau “lambang”. Kata kerjanya adalah semaino yang berarti “menandai” atau “melambangkan”. Tanda atau lambang menurut Ferdinand de Saussure, terdiri dari komponen yang mengartikan, yang berwujud bentuk-bentuk bunyi bahasa dan komponen yang diartikan atau makna dari komponen yang pertama itu. Kedua komponen ini adalah merupakan tanda atau lambang, sedangkan yang ditandai atau dilambanginya adalah sesuatu yang berada di luar bahasa yang lazim disebut referen atau hal yang ditunjuk. Kata semantik ini kemudian disepakati sebagai istilah yang digunakan untuk bidang linguistik yang mempelajari hubungan antara tanda-tanda linguistik dengan hal-hal yang ditandainya.
Oleh karena itu, kata semantik dapat diartikan sebagai ilmu tentang makna atau tentang arti, yaitu salah satu dari tiga tataran analisis bahasa, fonologi, gramatika, dan semantik. Dalam analisis semantik harus juga disadari, karena bahasa itu bersifat unik, dan mempunyai hubungan yang sangat erat dengan budaya masyarakat pemakainya, maka analisis suatu bahasa hanya berlaku untuk bahasa itu saja, tidak dapat digunakan menganalisis bahasa lain. Dalam setiap bahasa, termasuk bahasa Indonesia, seringkali kita temui adanya hubungan kemaknaan atau relasi semantik antara sebuah kata atau satuan bahasa lainnya dengan kata atau satuan bahasa lainnya lagi. Satuan bahasa disini dapat berupa kata, frase, maupun kalimat. Hubungan atau relasi kemaknaan ini mungkin menyangkut hal kesamaan makna (sinonim), kebalikan makna (antonim), kegandaan makna (polisemi dan ambiguitas), ketercakupan makna (hiponim), kelainan makna (homonim), kelebihan makna (redudansi), dan sebagainya.
 
B. Fungsi ini terkait dengan Tabel Simbol. Pengecekan yang di lakukan oleh analisis semantik adalah sebagai berikut :
1.       Memeriksa keberlakuan  nama-nama meliputi pemeriksaan berikut :
Duplikasi
Pada tahap ini dilakukan pengecekan apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukan pada bagian pengelola blok.
Terdefinisi
Melakukan pengecekan apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali blok.
2.       Memeriksa tipe, melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-statement yang ada.
Misal : bila ada operasi antara dua Operan maka Tipe operan pertama harus bisa dioperasikan dengan operan kedua.
Kode Antara/Intermediate Code Adalah hasil dari tahapan analisis, yang di buat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari kode antara sebagai berikut :
·  Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin. Dengan adanya kode antara yang lebih Machine Independent maka kode antara yang di hasilkan dapat digunakan lagi pada mesin lainnya.
·  Proses optimasi masih lebih mudah. Beberapa strategi optimisasi lebih mudah di lakukan pada kode antara di bandingkan pada program sumber atau pada kode assembly dan kode mesin.
·  Bisa melihat program internal yang mudah dimengerti. Kode antara ini akan lebih mudah di pahami dari pada kode assembly atau kode mesin.
Terdapat 2 Macam Kode Antara :
⥁ Notasi Postfix Adalah operator diletakkan paling akhir.
Sintaks Notasi Postfix : <operan><operan><operator>
Contoh 1 Ekspresi :
((M + N + B) * (ca + cd ) + X
1) M + N ------> MN +
2) +B       ------> B+
3) ca + cd ------> cacd+
4) +X       ------> +X
5) *          ------> *
Kode antaranya adalah :
⤷ (1)B+cacd+*X disederhanakan (1)B+(3)*X+
Contoh 2 Ekspresi : IF <exp> THEN <stmt1> ELSE <stmt2>
Kode antaranya adalah :
<exp> <label1> BZ <stmt1> <label2> BR <stmt2>
 
⥁ N Tuple Adalah setiap baris bisa terdiri dari beberapa tupel. N tuple yang biasa digunakan adalah notasi 3 tupel dan 4 tupel.
Sintaks N Tuple  : <operator><operan><operan>
Contoh notasi 3 tupel : 
B:=O*B+D/Z
<operator><operan><operan>
Kode antaranya adalah  : 
1) O*B -------> *OB
2) D/Z --------> /DZ
3) B+D -------> +BD
4) B:=  --------> =:B
Kode antaranya adalah :  
*OB/DZ+BD:=B disederhanakan *OB/DZ+(1)(2):=B
Contoh notasi 4 tupel :
<operator><operan><operan><hasil>
(A+B) * (Y+Z)
 1) A+B -------> +AB
2) Y+Z --------> +YZ
3) *
 Kode antaranya adalah : 
      *(1)(2)

Sabtu, 27 Oktober 2018

METODE PADA PARSING

⇝METODE PADA PARSING⇜


Metode parsing Parsing atau proses penurunan adalah Analisis parsing atau sintaksis adalah proses menganalisis serangkaian simbol, baik dalam bahasa alami atau dalam bahasa komputer, sesuai dengan aturan tata bahasa formal.


METODE TOP DOWN

Parsing digolongkan menjadi:

 • Top-Down top down parsing adalah langkah dalam membentuk/membangun sebuah parse tree berdasarkan input dimulai dari root dan membuat nodes untuk parse tree secara preorder(depth first). Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal.
 metode ini meliputi:
 • Backtrack/backup : Brute Force Metode Brute-Force tidak dapat menggunakan grammar rekursi kiri, yaitu grammar yang mengandung produksi rekursi kiri (left recursion) :
 Problems: Left Recursion Left factoring Sebuah grammar dikatakan bersifat left recursion apabila grammar tersebut mengandung suatu nonterminal dan derivasinya.

Contoh :

Diketahui : G = { S➞ T | ST | SU , T➞ a | b | c | ... | z , U➞ 0 | 1 | 2 | ... | 9 |

Ditanya    : Y25a ?

Jawab      :

                                                                         ➤➤Cara 1                                                                                     

                                                                                  ST                                                                            
                                                                                  SUT
                                                                                  SUUT
                                                                                    TUUT
                                                                                     YUUT
                                                                                      Y2UT
                                                                                       Y25T
                                                                                        Y25a


                                                                            ➤➤Cara 2






➸ METODE BOTTOM UP

Metode Top-Down Parsing tidak bisa menangani grammar yang mengandung left recursive, sehingga left recursive perlu dihilangkan..
Produksi rekursi kiri akan menyebabkan parsing mengalami looping tak hingga.
Grammar dapat dikatakan left factoring apabila terdapat produksi yang berbentuk seperti di bawah ini : Contoh :
A → αβ1 | αβ2
 Grammar tersebut diubah menjadi :
 A → αA’ A’
     → β1 |β2
Adanya left factoring ini menyebabkan grammar menjadi ambigu karena tidak jelas yang mana dari dua produksi alternatif yang bisa digunakan untuk memperluas nonterminal A. Dari contoh soal di atas, kita tidak tahu mau menelusuri A ke αβ1 atau ke αβ2.

• No backtrack : Recursive Descent Parser
• Bottom-Up
bottom up parsing adalah sebuah langkah parsing menggunakan langkah shift-reduce parsingShift reduce parsing bekerja berdasarkan namanya, “Shift” dan “Reduce” sehingga setiap kali stack memegang simbol-simbol yang tidak dapat dikurangi lagi, kita menggeser masukan lain, dan ketika itu cocok, kita mengurangi. Metode ini melakukan penelusuran dari leaf ke root
 – LR(k)
 – Presedence Parser
masing-masing metode parsing memiliki kelemahan dan kelebihannya masing-masing. Jadi ketika kita sedang menangani persoalan dengan mengandung empty production, lebih baik menggunakan Top-down parsing, sebaliknya, kita lebih baik menggunakan Bottom-up parsing untuk menangani persoalan yang mengandung left recursion. Karena itu metode parsing yang terbaik ialah yang dapat menggabungkan kedua cara ini. Metode parsing yang terbaik ialah metode yang dapat menggabungkan top-down dan bottom-up parsing yang disebut Left-corner.
Cara kerja Left-corner parsing ialah dengan mula-mula menerima sebuah kata, menentukan jenis constituent. 
Info tambahan : Terdapat metode parsing yang terbaik, yaitu metode yang menggabungkan top-down dan bottom-up parsing yang disebut Left-corner.
Cara kerja Left-corner parsing ialah dengan mula-mula menerima sebuah kata, menentukan jenis constituent .
Buktinya : Dengan proses parsing dimulai secara bottom-up dan diakhiri secara top-down. 

Contoh :

Diketahui : G = { W➞cNc , N➞ ( B|a , B➞ Na )}

Ditanya    : Dari 3 sentensial : cac, a (Bc , c (Na) c, tentukan handel dan relasi yang ada 

Jawab       : 



Jumat, 12 Oktober 2018

CONTOH PROGRAM DENGAN ANALISIS LEKSIKAL

.:Latihan:.

Contoh program :

#include <iostream.h>
#include <conio.h>
Void main ()
{
Int pil;
Cout<<"==============================="<<endl;
Cout<<"1. SENIN 2. SELASA 3. RABU 4. KAMIS 5. JUMAT 6. SABTU 7. MINGGU"<<endl;
Cout<<"==============================="<<endl;
Cout<<endl;
Cout<<"masukan sebuah huruf (1..7):";
Cin>>pil;
Switch (pil)
{
Case 1 : cout<<"HARI SENIN"<<endl;
Break;
Case 2 : cout<<"HARI SELASA"<<endl;
Break;
Case 3 : cout<<"HARI RABU"<<endl;
Break;
Case 4 : cout<<"HARI KAMIS"<<endl;
Break;
Case 5 : cout<<"HARI JUMAT"<<endl;
Break;
Case 6 : cout<<"HARI SABTU"<<endl;
Break;
Case 7 : cout<<"HARI MINGGU"<<endl;
Break;
Default : cout<<"tidak terdapat namaa hari"<<endl;
}
Getch();
}

_________________TOKENS___________________

Keyword (#include) operator (<) keyword (iostream.h) operator (>) keyword (#include) operator (<) keyword (conio.h) operator (>) keyword (void) keyword (main) funtuation (()) keyword ({) keyword (int) literal (pil) functuation (;) keyword (cout) operator (<<) functuation (") operator (===========) functuation (") operator (<<) keyword (endl) functuation (;) keyword (cout) operator (<<) functuation (") literal (1) functuation (.) Literal (senin) Literal (2) functuation (.) literal (selasa) literal (3) functuation (.) Literal (rabu) literal (4) functuation (.) Literal (kamis) literal (5) functuation (.) Literal (jumat) literal (6) functuation (.) Literal (sabtu) literal (7) functuation (.) Literal (minggu) functuation (") operator (<<) keyword (endl) functuation (;) keyword (cout) operator (<<) functuation (") operator (============) functuation (") operator (<<) keyword (endl) functuation (;) keyword (endl) functuation (;) keyword (cout) operator (<<) functuation (") literal (masukan) literal (sebuah) literal (huruf) functuation ( ( ) literal (1) functuation (..) literal (7) functuation ( ) ) operator (:) functuation (") functuation (;) keyword (cin) operator (>>) literal (pil) functuation (;) keyword (switch) functuation ( ( ) literal (pil) keyword ( ) ) keyword ({) keyword (case) literal (1) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (senin) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;) keyword (case) literal (2) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (selasa) functuation (") operator (<<) keyword (endl) keyword (break) functuation (;) keyword (case) literal (3) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (rabu) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;)keyword (case) literal (4) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (kamis) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;)keyword (case) literal (5) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (jumat) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;)keyword (case) literal (6) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (sabtu) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;)keyword (case) literal (7) operator (:) keyword (cout) operator (<<) functuation (") literal (hari) literal (minggu) functuation (") operator (<<) keyword (endl) functuation (;) keyword (break) functuation (;) keyword (default) operator (:) keyword (cout) operator (<<) functuation (") literal (tidak) literal (terdapat) literal (nama) literal (hari) functuation (") operator (<<) keyword (endl) functuation (;) keyword (}) keyword (getch) functuation (()) functuation (;) keyword (})