วิธีการปฏิบัติที่เป็นตัวอย่างในการทำงาน [แต่ไม่เสมอไปฉันรู้] กำลังพยายามหาโครงสร้างการซ้อนของสตริงในภาษา "การพึ่งพาแบบซ้อน" ต้องถูกสร้างขึ้นในเวลาเดียวกันในส่วนต่าง ๆ ของสตริง
นอกจากนี้เรายังมีกล่องเครื่องมือพื้นฐาน :
การต่อข้อมูล:หากคุณสามารถแยกภาษาออกเป็นสองส่วนติดต่อกันใช้การผลิตนี้S→S1S2
union:แบ่งออกเป็นส่วนที่แยกจากกันS→S1∣S2
การวนซ้ำ:S→S1S∣ε
ตัวอย่างที่ 1
นี่คือตัวอย่างสำหรับการทำรัง (ขอบคุณกราฟิลส์)
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
แทนที่โดย2Lตอนนี้เราสามารถปล่อยในเงื่อนไขn2ln
แทนที่ด้วย (สับสน?คือ 'โอ้' ไม่ใช่ 'ศูนย์') ใช้เครื่องมือสำหรับสหภาพ เราทำงานกับที่นี่ นอกจากนี้ iffและโดยที่เป็นตัวแปรใหม่ แทนที่โดย Ok≠ok>o or k<ook>ok>ok=s+os>0sks+o
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
เขียนใหม่ง่าย ๆ
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
ตอนนี้เราเห็นโครงสร้างการซ้อนและเริ่มสร้างไวยากรณ์
S1→TV , , (ดู: การต่อข้อมูลและการวนซ้ำที่นี่)T→bUU→bU∣ε
V→bVb∣W (เราสร้าง 's ทั้งสองด้าน)o b
W→aWaa∣X
X→YZ , ,Y→bcbcZ→bcZ∣ε
ตัวอย่างที่ 2
K={akblcm∣l=m+k}
การเขียนครั้งแรก "ชัดเจน"
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
ใน linguistice สิ่งนี้เรียกว่า "cross-serial dependency": interleaving (ปกติ) บ่งชี้อย่างยิ่งว่าไม่ใช่บริบท แน่นอนและเราถูกบันทึกไว้k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
ด้วยโปรดักชั่น , ,S→XYX→aXb∣εY→bYc∣ε
ในทำนองเดียวกันK′={akblcm∣m=k+l}={akblclck∣k,l≥0}
ด้วยโปรดักชั่น ,S→aSc∣XX→bXc∣ε
ความคิดเห็นสุดท้าย: เทคนิคเหล่านี้จะช่วยให้คุณเรียนรู้ไวยากรณ์ที่เหมาะสมกับบริบทของผู้สมัครซึ่งหวังว่าจะจดจำภาษาของคุณได้ อาจจำเป็นต้องใช้หลักฐานการพิสูจน์ความถูกต้องเพื่อให้แน่ใจว่าไวยากรณ์ใช้งานได้จริงในการจดจำภาษาของคุณ (ไม่มีอะไรมากและไม่มีอะไรน้อย)