Chomsky Normal Form
CFG อยู่ใน Chomsky Normal Form หากโปรดักชั่นอยู่ในรูปแบบต่อไปนี้ -
- ก→ก
- ก→ พ.ศ.
- S →ε
โดยที่ A, B และ C ไม่ใช่ขั้วและ a คือเทอร์มินัล
อัลกอริทึมเพื่อแปลงเป็น Chomsky Normal Form -
Step 1 - หากสัญลักษณ์เริ่มต้น S เกิดขึ้นทางด้านขวาสร้างสัญลักษณ์เริ่มต้นใหม่ S’ และการผลิตใหม่ S’→ S.
Step 2- ลบการผลิตที่เป็นโมฆะ (โดยใช้อัลกอริทึมการลบการผลิตที่เป็นโมฆะที่กล่าวถึงก่อนหน้านี้)
Step 3- ลบการผลิตหน่วย (โดยใช้อัลกอริทึมการกำจัดการผลิตหน่วยที่กล่าวถึงก่อนหน้านี้)
Step 4 - เปลี่ยนการผลิตแต่ละครั้ง A → B1…Bn ที่ไหน n > 2 ด้วย A → B1C ที่ไหน C → B2 …Bn. ทำซ้ำขั้นตอนนี้สำหรับการผลิตทั้งหมดที่มีสัญลักษณ์สองตัวขึ้นไปทางด้านขวา
Step 5 - หากด้านขวาของการผลิตใด ๆ อยู่ในรูปแบบ A → aB โดยที่ a คือเทอร์มินัลและ A, B ไม่ใช่ขั้วจากนั้นการผลิตจะถูกแทนที่ด้วย A → XB และ X → a. ทำซ้ำขั้นตอนนี้สำหรับทุกการผลิตที่อยู่ในรูปแบบA → aB.
ปัญหา
แปลง CFG ต่อไปนี้เป็น CNF
S → ASA | aB, A → B | S, B → b | ε
วิธีการแก้
(1) ตั้งแต่ S ปรากฏใน RHS เราเพิ่มสถานะใหม่ S0 และ S0→S ถูกเพิ่มลงในชุดการผลิตและกลายเป็น -
S 0 → S, S → ASA | aB, A → B | S, B → b | ∈
(2) ตอนนี้เราจะลบโปรดักชั่นว่าง -
B →∈และ A →∈
หลังจากลบ B →εชุดการผลิตจะกลายเป็น -
S 0 → S, S → ASA | aB | a, A → B | S | ∈, B → b
หลังจากลบ A →∈ชุดการผลิตจะกลายเป็น -
S 0 → S, S → ASA | aB | ก | AS | SA | S, A → B | S, B →ข
(3) ตอนนี้เราจะลบการผลิตหน่วย
หลังจากลบ S → S ชุดการผลิตจะกลายเป็น -
S 0 → S, S → ASA | aB | ก | AS | SA, A → B | S, B →ข
หลังจากลบ S 0 → S ชุดการผลิตจะกลายเป็น -
ส0 → ASA | aB | ก | AS | SA, S → ASA | aB | ก | AS | ส
A → B | S, B →ข
หลังจากลบ A → B ชุดการผลิตจะกลายเป็น -
ส0 → ASA | aB | ก | AS | SA, S → ASA | aB | ก | AS | ส
A → S | ข
B →ข
หลังจากลบ A → S ชุดการผลิตจะกลายเป็น -
ส0 → ASA | aB | ก | AS | SA, S → ASA | aB | ก | AS | ส
A → b | ASA | aB | ก | AS | SA, B →ข
(4) ตอนนี้เราจะพบมากกว่าสองตัวแปรใน RHS
ที่นี่ S 0 → ASA, S → ASA, A → ASA ละเมิดสองขั้วที่ไม่ใช่ใน RHS
ดังนั้นเราจะใช้ขั้นตอนที่ 4 และขั้นตอนที่ 5 เพื่อรับชุดการผลิตขั้นสุดท้ายต่อไปนี้ซึ่งอยู่ใน CNF -
S 0 → AX | aB | ก | AS | ส
S → AX | aB | ก | AS | ส
A → b | AX | aB | ก | AS | ส
B →ข
X → SA
(5)เราต้องเปลี่ยนโปรดักชั่น S 0 → aB, S → aB, A → aB
และชุดการผลิตขั้นสุดท้ายจะกลายเป็น -
S 0 → AX | YB | ก | AS | ส
S → AX | YB | ก | AS | ส
A → b A → b | AX | YB | ก | AS | ส
B →ข
X → SA
Y →ก