Grammar Bebas Konteks (Context-Free Grammars)

07. GRAMMAR

  ¾ Secara umum grammar didefinisikan sebagai sebuah himpunan hingga yang tak hampa dari aturan atau produksi yang menspesifikasikan sintaks dari suatu bahasa. ¾ Secara matematis, grammar dapat ditulis sebagai himpunan dengan 4 anggota (tupel) sbb.:

  G = (V , V , S, Q)

  N T

  V = himpunan simbul non terminal, dapat berupa sebuah ekspresi

  N

  V = himpunan simbul terminal, dapat berupa karakter

  T

  S = simbul awal dari pohon sintaks Q = himpunan produksi, yang menggambarkan uraian penurunan dari

  V menjadi beberapa V

  N T

  ¾ Chomsky mengelompokkan Grammar menjadi 4 kelompok berdasarkan

  pembatasan pada aturan produksi, yaitu:

  • Grammar tingkat nol (unrestricted grammars), atau grammar umum yaitu grammar yang mempunyai aturan produksi yang tidak terbatasi.
  • Grammar tingkat pertama (Context-sensitive grammars).
  • Grammar tingkat kedua (Context-free grammars).
  • Grammar tingkat ketiga (Regular grammars).

  

Grammar

Regular

(tingkat tiga)

Grammar Context-Free

  

(tingkat kedua)

Grammar Context-Sensitive

(tingkat pertama)

Grammar Umum (tingkat nol)

   (Grammar tingkat nol) Grammar Umum

  Gammar Umum dengan 4-tupel dapat dituliskan sbb.: G = (V , V , S, Q)

  N T dengan dan V adalah himpunan simbol terminal dan himpunan simbol

  • V T N non-terminal yang saling bebas (tidak bergayut).

  , yang disebut simbol Start.

  N

  • S adalah suatu elemen tertentu dari V • Q merupakan subhimpunan hingga yang tidak kosong dari relasi

  ∪ V ∪ V (V ) ke (V )

  T N T N

  atau secara umum, sebuah elemen ( α, β) dari Q, ditulis sebagai

  α → β dan disebut sebagai produksi.

  Sebagai contoh dalam mendefinisikan identifier (sebagai simbul start), dapat dituliskan Grammar berikut : G = (V , V , S, Q)

1 N T

  dengan V = {I, L, D}

  N

  V = {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,

  T

  2,3,4,5,6,7,8,9} S = I

  → L, I → IL, I → ID, L → a, L → b, .... , L → z, Q = {I

  D → 0, D → 1, ...., D → 9}

  Context-Sensitive Grammars Grammar Peka Konteks (

  )

  Seperti halnya grammar umum, grammar context-sensitive, atau Grammar tipe pertama, dapat ditulis sbb.: G = (V , V , S, Q)

  N T

  dengan V , V , dan S yang masing-masing adalah himpunan simbul

  N T non terminal, himpunan simbul terminal, dan simbul start.

  sedangkan Q yang merupakan himpunan produksi hanya terdiri dari produksi berbentuk α → β , dengan α <= β. Di sini α dan 

  β berturut-turut menunjukkan panjang untai alpha dan untai beta. Di sini, bentuk pembatasan produksi pada grammar context-sensitive adalah untuk mencegah agar

  β tidak menjadi untai hampa. Artinya bahwa aturan produksi membatasi bahwa penguraian tidak akan menghasilkan himpunan hampa. Grammar peka konteks dapat didefinisikan dengan cara lain sbb.: β

  α dan β dalam produksi α → , disajikan sebagai :

  Q A Q α = 1 2

  β = Q γ Q 1 2

  dan Q adalah frase yang keduanya boleh hampa

  1

  2

  • Q

  γ

  • yang merupakan simbul terminal, dalam hal ini harus tidak hampa.

  Jadi suatu grammar adalah peka konteks (context-sensitive) jika semua produksinya berbentuk:

  Q A QQ γ Q 1 2 1 2 Ini berarti bahwa simbul non terminal A dapat digantikan dengan γ dalam konteks antara Q dan Q .

  1

2 Grammar Context-Sensitive membentuk Bahasa Context-Sensitive. Contoh

  Bahasa Context-sensitive adalah bahasa :

  L(G ) = {a b c

  n n n  n >= 1}.

2 Bahasa ini dibentuk dari Grammar Context-Sensitive G sebagai berikut :

  2 G = ({S,B,C}, {a,b,c}, S, Q)

  2

  dengan himpunan produksi Q terdiri dari produksi

  1. S → aSBC 4. BC → bc

  2. S → abC 5. CB → BC → bb 6. cC → cc

  3. bB Berikut ini adalah derivasi untuk untai aabbcc

  S → aSBC melalui produksi 1 → aabCBC melalui produksi 2 → aabBCC melalui produksi 5 → aabbCC melalui produksi 3 → aabbcC melalui produksi 4 → aabbcc melalui produksi 6

  Grammar Bebas Konteks (Context-Free Grammars)

  Seperti halnya grammar umum, grammar context-free, atau Grammar tipe kedua, dapat ditulis sbb.: G = (V , V , S, Q)

  N T dengan V , V , dan S yang masing-masing adalah himpunan simbul

  N T non terminal, himpunan simbul terminal, dan simbul start.

  sedangkan Q hanya terdiri dari produksi berbentuk : α → β, dengan α

  <=  (simbol nonterminal).

  N

  β, dan α adalah anggota dari V Ini berarti bahwa pada Grammar Context-Free seluruh produksinya tidak akan menghasilkan himpunan hampa, bersifat bahwa ruas kiri hanya terdiri dari satu jenis simbol, yakni satu simbol nonterminal.

  Grammar Context-Free merupakan pembentuk Bahasa Context-Free.

  Contoh: Bahasa Context-Free :

  n n

  L(G ) = {a bc  n >= 1}

  3

  dibentuk oleh Grammar Context-Free sebagai berikut : G = ({S,C},{a,b},S,Q),

  3

  dengan Q adalah produksi : S → aCa

  → aCa C C → b

  Derivasi untuk aaabaaa, terdiri dari langkah sebagai berikut : S → aCa

  → aaCaa → aaaCaaa → aaabaaa

  Grammar Regular

  Seperti halnya grammar umum, grammar context-free, atau Grammar tipe kedua, dapat ditulis sbb.: G = (V , V , S, Q)

  N T

  dengan V , V , dan S yang masing-masing adalah himpunan simbul

  N T non terminal, himpunan simbul terminal, dan simbul start.

  sedangkan Q hanya terdiri dari produksi berbentuk : α → β, dengan

   , dan

  α <= β, α adalah anggota V N β mempunyai bentuk aB atau a, dengan a anggota V dan B anggota V .

  T N

  Pada Grammar Regular seluruh produksinya tidak akan menghasilkan himpunan hampa, bersifat bahwa ruas kiri hanya terdiri dari satu jenis simbol, yakni satu simbol nonterminal, ruas kanan harus mengandung simbul terminal. Bahasa yang dibentuk oleh Grammar Regular disebut Bahasa Regular. Contoh bahasa regular yang dibentuk dari grammar regular adalah sebagai berikut :

  n m

   n,m >= 1}, dengan L(G ) = {a ba

4 G = ({S,A,B,C},{a,b},S,Q)

  4

  dan produksinya adalah : S → aS S → aB B → bC C → aC

  → a C

  3

2 Kalimat a ba atau aaabaa, mempunyai derivasi sebagai berikut :

  S → aS → aaS → aaaB → aaabC → aaabaC → aaabaa

  Ekspresi Regular

Ekspresi regular adalah notasi yang digunakan untuk mendefinisikan

  suatu himpunan ekspresi tertentu. Ekspresi regular dibentuk berdasarkan ekspresi regular lain yang lebih sederhana dengan menggunakan beberapa aturan tertentu. Ekspresi Regular adalah Ekspresi yang dapat dibentuk menurut ketentuan sebagai berikut:

  φ 1. adalah Ekspresi Regular, menunjukkan himpunan hampa.

  ∧ adalah Ekspresi Regular, yang menunjukkan Bahasa yang hanya 2. terdiri dari untai hampa, yaitu bahasa L = { ∧}

  3. Suatu huruf a anggota V , adalah Ekspresi Regular, menunjukkan

  T Bahasa yang terdiri dari simbol tunggal a, yaitu Bahasa L = {a}.

  4. Jika e dan e adalah Ekspresi Regular yang berturut-turut menunjukkan

  1

  2 Bahasa L dan L , maka

  1

  2

  (a) e e adalah Ekspresi Regular menunjukkan L ∪ L

  1

  2

  1

  2

  (b) e e adalah Ekspresi Regular menunjukkan L L

  1

  2

  1

  2

  (c) e adalah Ekspresi Regular menunjukkan L

  1

  1 Dalam Ekspresi Regular dapat digunakan 3 operator, yakni :

  • Perangkai atau concatenation
  • Alternasi atau alternation
  • Penutup atau closure

  Perangkaian

  Perangkaian dua buah ekspresi e dan e yang menyajikan Bahasa L dan

  1

  2

  1 L , adalah sbb.:

  2

   x ∈ L e e = {xy , dan y ∈ L }.

  1

  2

  1

2 Alternasi

  Alternasi dinotasikan dengan  atau +, merupakan gabungan atau union dari bahasa yang disajikan oleh kedua ekspresi. Berarti e  e = {x  x ∈ L , atau x ∈ L }.

  1

  2

  1

  2 Penutup

  Penutup atau closure yang dinotasikan dengan apitan kurung {}, atau dengan subskrip *, menunjukkan pengulangan dari 0 atau lebih kali Ekspresi. Jadi

   x ∈ L {e } = e * = {x *}.

  1

  1

  1 ∞ i

  ∪ L Di sini L * = i = atau L * adalah penutup dari L .

  1 1

  1

  1 Berikut ini 3 buah contoh lain dari Ekspresi Regular, yang menyajikan himpunan Token tertentu.

  digit)* (1) {identifier} = letter(letter (2) {PL/1 name} = (letter #$@){letterdigitzy_$}

  ∧+-)((digit)*,digit(digit)*) (3) {number} = ( Hirarki dari ketiga operator tersebut, berturut-turut dari tinggi ke rendah adalah Closure, Concatenation, dan Alternation.

  Tanda kurung bila tidak diperlukan dapat dihilangkan, sebagai contoh; ekspresi ((p)  ((p)(q)) adalah sama dengan ppq. Namun dalam kasus (p q)r, tanda kurung tidak dapat dihilangkan. Token dari Bahasa pemrograman dapat didefinisikan baik dalam penyajian Grammar Regular maupun dalam Ekspresi Regular. Sebagai contoh suatu identifier yang terdiri dari huruf dan digit, serta harus dimulai dengan huruf, dapat disajikan sebagai Grammar Regular.

  S → aAbAcA......zAabc.......z A → aAbA.......zA0A1A.....9Aabc......z01.....9 atau dengan Ekspresi Regular (a bc.....z)(abc.....z01.......9)*

  Jika kita menggunakan letter sebagai singkatan dari a bc.....z, dan 1.......9, maka Ekspresi dapat ditulis sebagai digit untuk 0

  digit)* letter(letter Operator Ekspresi Regular juga mempunyai sifat-sifat aljabar sbb.: Alternation dan concatenation adalah asosiatif

  (ab)c = a(bc) (a b)c = a(bc)

  Alternation juga komutatif a b = ba Concatenation mendistribusikan alternation a(b c) = abac

  Mengubah Grammar regular menjadi Ekspresi regular

  Sebagai contoh Bahasa regular L

  m n

  L{a ba n,m >= 1} Himpunan produksinya adalah :

  → aS

  1. S

  2. S → aB

  3. B → bC

  4. C → aC

  5. C → a

  Mula-mula operator produksi diganti dengan tanda sama dengan. Kemudian dikombinasikan semua produksi yang mungkin menjadi satu Ekspresi dengan menggunakan operator alternasi.

  Grammar di atas dapat ditulis menjadi himpunan persamaan sbb.: S = aS aB B = bC

  a C = aC

  Selanjutnya, himpunan persamaan diselesaikan dengan melakukan Keterangan bahwa persamaan C mempunyai penyelesaian C = (a)*a.

  C = aC a a

  (a)*a = a(a)*a kalau ruas kanan diuraikan, akan diperoleh ∧)a

  (a)*a = ((a)*a (a)*a ∧ = (a)*

  ∧ dapat dihasilkan oleh kedua ruas persamaan, demikian pula a, karena dan setiap untai a' Maka didapat {a}a = {a}a Hasil dari C dapat disubstitusikan ke dalam persamaan kedua. Persamaan ketiga dapat dihilangkan.

  Hasilnya, himpunan persamaan sbb.: S = a(S B) B = b(a)*a dengan mensubstitusikan B ke dalam persamaan pertama akan diperoleh hasil sbb.:

  S = a(S b(a)*a) ab(a)*a

  = aS Sehingga diperoleh

  S = (a)*ab(a)*a yang merupakan suatu Ekspresi Regular.

  Algoritma suatu Ekspresi Regular yang ekivalen dari suatu Grammar Regular, sbb.:

  i

  Misal suatu Grammar Regular dengan himpunan Produksi berbentuk X → Y, dengan Y adalah suatu bentuk aX , atau a, dengan a anggota V ,

  j T

  algoritma ini menghasilkan suatu Ekspresi Regular yang ekivalen. X

  1

  adalah sombol awal Grammar. 1. [Mengubah Produksi menjadi Persamaan]

  Ulangi untuk setiap Produksi X → Y dari Grammar Regular

  i

  jika persamaan X = Y, tidak ada sebelumnya,

  i

  maka definisikan X = Y

  i

  selain itu, ubah X = W menjadi X = W Y,

  i i

  di sini W telah didefinisikan di bagian sebelumnya dari persamaan X

  i

  Ulangi untuk i = 1,2,.........n-1 Y

  Ubah persamaan X ke dalam bentuk X = W

  X

  i i i i i

  dengan Y adalah bentuk  X ....... X dan W dan

  i 0,1 I+1,1 I n,1 n i

  Φ Φ Φ setiap adalah Ekspresi Regular di bawah V Φ j,i

  T

  Ulangi untuk j=i+1,i+2,..........,n Substitusikan W untuk X ke dalam persamaan untuk X

  i i j

  3. [Menyelesaikan persamaan] Ulangi untuk i = n, n-1,......1

  Y Ubah persamaan untuk X ke dalam bentuk W

  X

  i i i i

  dengan Y adalah suatu Ekspresi Regular atas V Y

  1 T

  1 Ulangi untuk j=i-1,i-2,......,1

  Substitusikan penyelesaian (W )*}Y untuk X ,

  i j i

  ke dalam persamaan untuk X

  j

  4. [Mencetak penyelesaian] Write('SOLUSI ADALAH',(W }*Y )

  i

  

1

Exit

  Sedangkan yang dimaksud dengan parsing dari sebuah kalimat adalah konstruksi atau pembentukan pohon sintaks untuk kalimat tersebut. Hubungan struktural antar bagian kalimat, dapat dilihat dari bentuk pohon sintaks kalimat tersebut. Sebagai contoh sebuah derivasi dari identifier x2 adalah

  <identifier> Ö <identifier><digit> Ö <letter> <digit> Ö x <digit> Ö x2

  Bagaimana cara mengkonstruksi sebuah pohon sintaks pada derivasi

  ini dapat dilihat pada gambar berikut. Gambar ini memuat sebuah barisan diagram, dengan masing-masing diagram bersesuaian dengan sebuah bentuk sentensial dalam derivasi dari kalimat tersebut.

  Contoh bentuk sentensial:

  Sebuah Grammar G sbb: G = ({<identifier>,<letter>,<digit>}, {a,b,....,z,0,1,....,9}, <identifier>, Q) dengan produksi Q adalah:

  → <letter>  <identifier><letter>  <identifier><digit> <identifier>

  <letter> → ab......yz <digit> → 01.......9

  Bentuk sentensial dari identifier ini diperoleh dari deretan produksi : → <identifier><letter>

  <identifier> → <identifier><digit><letter> → <letter><digit><letter>

  Di sini terdapat beberapa phrase yaitu; <letter>, <identifier><letter>, <identifier><digit><letter>, <letter><digit><letter>. Sedangkan <digit> tidak terdapat dalam derivasi ini, jadi <digit> adalah bukan phrase dari bentuk sentensial ini.

  Pohon sintaks mempunyaisebuah simpul yang spesifik, yang disebut dengan root (akar). Simpul root ini diberi label Start, yakni <identifier>, dari Grammar. Dari akar kita gambar dua cabang ke bawah (lihat gambar) yang dimaksudkan untuk menulis kembali <identifier> dengan <identifier><digit>. Simbol <identifier> dalam bentuk sentensial <identifier><digit> kemudian ditulis menjadi <letter>, sesuai dengan produksi <identifier> → <letter>. Proses ini berlangsung terus untuk masing-masing produksi yang digunakan sampai diperoleh pohon sintaks lengkap untuk x2.

  Pohon sintaks untuk sebuah kalimat selalu mempunyai sebuah simpul akar yang diberi label berupa simbol Start dari Grammar. Simpul Daun dari pohon sintaks menyajikan simbol terminal dalam kalimat yang telah diuraikan. Semua simpul bukan daun menyajikan simbol nonterminal. Tiap-tiap simpul non-terminal mempunyai sejumlah cabang ke bawah. Masing-masing cabang menyajikan sebuah simbol pada ruas kanan dari produksi yang dipergunakan.

  Sebagai contoh derivasi identifier b33, adalah sebagai berikut: <identifier>Ö <identifier><digit>

  Ö <identifier><digit><digit> Ö <letter><digit><digit> Ö b <digit><digit> Ö b3 <digit> Ö b33

  Kemungkinan lain derivasi untuk identifier yang sama adalah: <identifier>Ö <identifier><digit>

  Ö <identifier><digit><digit> Ö <identifier><digit>3 Ö <identifier>33 Ö <letter>33 Ö b33

  Kedua derivasi di atas mempunyai pohon sintaks yang sama seperti gambar berikut.

  Contoh lain membuat pohon sintaks dari sebuah Grammar sbb.: G = ({<ekspresi>,<faktor>,<term>}, {i,+,*,(,)}, <ekspresi>, Q) dengan Q terdiri dari produksi

  <faktor> → i  <ekspresi> → <faktor>  <ekspresi> * <faktor>

  <term> <ekspresi> → <term>  <ekspresi> + <term> Di sini i digunakan untuk menyatakan sebuah identifier atau nama variabel.

  Pohon sintaks dari bentuk sentensial <ekspresi> + <term> * <faktor> diberikan pada gambar berikut dengan <ekspresi> + <term> * <faktor> dan <term> * <faktor> adalah phrase. Di sini <term> * <faktor> adalah simple phrase.

  Perlu dicatat bahwa untuk sebuah pohon sintaks dapat ada satu atau lebih derivasi. Selain itu perlu dijelaskan bahwa pada kalimat yang sama dapat mempunyai dua phrase yang berarti mempunyai dua pohon sintaks yang berbeda. Hal ini dapat dijelaskan sbb.: Sebuah Grammar G dengan produksi sbb.:

  S → S * S → a

  S di sini a adalah simbol terminal. Salah satu derivasinya adalah

  S Ö S * S Ö S * S * S Ö a * S * S Ö a * a * S Ö a * a * a atau

  S Ö S * S Ö S * S * S Ö S * S * a Ö S * a * a Ö a * a * a Kedua derivasi ini dapat digambarkan dengan pohon sintaks sbb.: S S S S S S x x

  S S S S x x a a a a a a

  Definisi

  Sebuah kalimat yang dihasilkan oleh sebuah Grammar adalah

  

Ambiguous, jika terdapat lebih dari satu Pohon Sintaks yang dapat

  membentuk kalimat tersebut. Sebuah Grammar adalah Ambiguous, jika ia menghasilkan paling sedikit satu kalimat Ambiguous.

  Ada beberapa metode pengurai (parser) untuk suatu Grammar. Metoda-metoda yang lazim dipakai dalam kompilator dapat diklasifikasikan sebagai metoda atas-bawah (top-down parser) dan bawah- atas (bottom-up parser). Pengurai top-down membentuk pohon urai (parse

  

tree) dari atas (akar) ke bawah (daun), sedangkan pengurai bottom-up

  memulai dari daun dan bergerak ke akarnya. Pada kedua metoda itu, masukan pengurai tersebut disaring dari kiri ke kanan, sekali satu symbol.

PARSING TOP-DOWN

  Konstruksi pohon sintaks atau parsing top-down dapat digambarkan sbb.: Di sini akar dan daun mewakili simbol terminal dalam kalimat.

  Ada beberapa metode yang dapat digunakan untuk menyelesaikan konstruksi ini. Pertama, usahakan konstruksi pohon dapat dimulai dari akar dan dilanjutkan turun ke bawah menuju daun. Metode ini disebut Top- Down Parsing.

  Untuk menjelaskan tentang metode top-down parsing, pandang identifier x2 yang dibentuk oleh Grammar sbb.: G = ({<identifier>,<letter>,<digit>}, {a,b,.....,z,0,1,....,9}, <identifier>, Q) Langkah pertama adalah mengkonstruksi derivasi langsung

  <identifier> Ö <identifier><digit> Pada setiap urutan langkah, nonterminal paling kiri

  α dari bentuk sentensial Q , diganti dengan bagian kanan dari produksi A →

  1 αQ

  2

  ψ, untuk membentuk bentuk sentensial berikutnya. Proses dalam mengidentifikasikan x2 ditunjukkan pada pohon sintaks sbb.: Secara garis besar ada 2 metode Top-Down parsing, yakni metode dengan backup, dan metode tanpa backup. Backup adalah pengulangan penggunaan suatu produksi dengan alternatif produksi yang lain, bila produksi yang digunakan tidak sesuai dengan simbol input. Metode yang pertama (metode dengan backup) di antaranya adalah teknik Brute Force, dan metode yang kedua (metode tanpa backup) di antaranya adalah teknik Recursive Descent.

  Berikut ini merupakan contoh yang memperlihatkan cara kerja metode Brute Force, berdasarkan Grammar dengan produksi berikut:

  1. S → aAd

  2. S → aB → b

  3. A

  4. A → c → ccd

  5. B

  6. B → ddc Di sini S, A, dan B adalah simbol nonterminal, dengan S adalah simbol Start. Sedangkan a, b, c, dan d adalah simbol terminal.

  Ekivalensi Grammar Regular Dan Automata Hingga D apat dibuktikan bahwa bahasa yang diterima oleh Automata hingga adalah sama dengan bahasa yang dapat dihasilkan oleh Grammar Regular.

  Teorema

  Ada suatu AHN F = (K,V ,M,S,Z) yang dapat menerima bahasa yang

  T dihasilkan oleh Grammar Regular G = (V ,V ,S,Q).

  N T Bukti

  ∪ {X}, dengan X bukan anggota V AHN F dengan Stata K sebagai V .

  N N

  Stata Awal dari Automata Hingga adalah S (simbol start dari Grammar), dan Stata Akhirnya adalah X. Untuk masing-masing produksi Grammar dibuat fungsi M, dengan cara berikut:

  1. A anggota M(A ,a), jika terdapat produksi

  j i

  A → aA pada G

  i j

  2. A anggota M(A ,a), jika terdapat produksi

  i i

  A → a pada G

  i

  Untuk menggambarkan bagaimana suatu AHN dikonstruksi dari suatu Grammar Regular, perhatikan Grammar Regular G = (V ,V ,S,Q)

  N T

  dengan V = {S,A,B}

  N

  V = {a,b}

  T

  himpunan produksi Q adalah : → aS 4. A → aB

  1. S

  2. S → bA 5. B → b → aA

  3. A Kita tentukan AHN F = (K,V ,M,S,Z) dengan

  T

  K = {S,A,B,X} V = {a,b}

  T

  Z = {X} dan M ditentukan oleh : → aS

  1. M(S,a) = {S}, dari produksi S

  2. M(S,b) = {A}, dari produksi S → bA

  3. M(A,a) = {A,B}, dari produksi A → aA dan A → aB

  4. M(B,b) = {B}, dari produksi B → b

  5. M(A,b) = M(B,a) = HAMPA, karena tidak ada produksi yang berkoresponsi dengan pemetaan (fungsi).

  Jadi F adalah suatu Automata Hingga Nondeterministik yang menerima bahasa yang digambarkan oleh Grammar Regular G.

  Sama halnya seperti Automata Hingga Nondeterministik yang dapat dikonstruksi dari suatu Grammar Regular, Grammar Regular juga dapat diturunkan dari suatu Automata Hingga. Teorema berikut memberikan prosedur yang diperlukan untuk membuat suatu Grammar dari AHN yang diketahui.

  Teorema

  Akan selalu ada suatu Grammar Regular G = (V ,V ,S,P), yang

  N T

  menghasilkan bahasa yang diterima oleh suatu AHD tertentu F = (K,V ,M,S,Z).

  T Bukti

  Definisikan Grammar Regular G dengan anggota K (Stata internal dari

  F) menjadi simbol Non-terminaldari G. Simbol start dari G adalah S (Stata Awal dari F), dan himpunan produksi P ditentukan sebagai berikut :

  1. A → aA anggota P, jika M(A ,a) = A

  i j i j

  → a anggota P, jika M(A 2. A ,a) = A , dan A anggota Z.

  i i j j

  Harus ditunjukkan bahwa S → .... → x, jika dan hanya jika M(S,x) x >= 1. Pada kasus x = ∧, dan M(S,x) anggota Z, anggota Z untuk tambahkan produksi S → ∧ ke dalam P.

  Misalnya x = a ,a ,.......,a anggota L(F), dan n >= 1.

  1 2 n

  Kemudian terdapat himpunan transisi : M(S,a ) = A

  1

1 M(A ,a ) = A

  1

  2

  2 ......................

  M(A ,a ) = A

  n-1 n n dengan A adalah Stata Akhir dari F. n

  Jadi G memuat produksi S → a A

  1

  1

  → a A A

  1

  2

  2 .............

  → a A

  n-1 n dan Grammar G dapat menghasilkan untai yang diterima oleh F.

  Pertanyaan dan Latihan Soal

  1. Menurut Noam Chomsky, Grammar dibagi menjadi 4 tipe. Sebutkan keempat tipe Grammar tersebut dan jelaskan masing-masing Grammar tersebut 2. Sebutkan apa yang dimaksud dengan notasi infix maupun postfix.

  3. Apa yang dimaksudkan dengan produksi di dalam Grammar. Jelaskan dengan beberapa contoh.

  4. Sebutkan 4 tipe Grammar yang kamu ketahui, dan jelaskan perbedaan masing-masing.

  5. Buatlah pohon sintak (syntax tree) dan directed acyclic graph (DAG) untuk ekspresi dan statement berikut: a) a + a * ( b - c ) + ( b - c ) * d

  b) a := b * - c + b * - c

  6. Turunkan sebuah Grammar Regular dari Automata Hingga Deterministik F = ({A,B,C},{a,b},M,A,{C}) dengan M didefinisikan sbb.:

  MASUKAN STATA a b

  A A B B A C C C B

  7. Konversikan Grammar G menjadi suatu Automata Hingga (Finite State Acceptor) Bila G = ({A,B,C,D},{0,1},A,Q) dan Q adalah

  → →

  1. A

  0B

  5. C

  0D

  → →

  2. A

  1C

  6. C

  1

  3. B →

  1A

  7. D →

  →

  4. C

  0C Kemudian periksa untai 11100 ini apakah termasuk dalam bahasa L(G) atau tidak.