Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สร้าง Pushdown Automata สำหรับภาษา L = {0ⁿ1ᵐ2ᵐ3ⁿ | m,n ≥ 0} ใน C++

บทความนี้อธิบายการสร้าง PDA สำหรับภาษาที่:

  • จำนวน 0 = จำนวน 3
  • จำนวน 1 = จำนวน 2
  • m,n ≥ 0 (รวมสตริงว่าง)

State และ Transition

q₀: เริ่มต้น รับ 0 และ 1

  • (0, I/0I) → q₀: push 0
  • (0, 0/00) → q₀: push 0
  • (1, 0/10) → q₁: push 1 บน 0
  • (1, I/1I) → q₅: เริ่มจาก 1 (m>0, n=0)
  • (3, 0/ε) → q₃: pop 0 สำหรับ 3
  • ($, I/I) → q₄: สตริงว่าง

q₁: รับ 1 ต่อ

  • (1, 1/11) → q₁: push 1
  • (2, 1/ε) → q₂: pop 1 สำหรับ 2

q₂: pop 1 สำหรับ 2 แล้ว pop 0 สำหรับ 3

  • (2, 1/ε) → q₂
  • (3, 0/ε) → q₃

q₃: pop 0 สำหรับ 3

  • (3, 0/ε) → q₃
  • ($, I/I) → q₄ (accept)

q₅: กรณีเริ่มจาก 1 (n=0)

  • (1, 1/11) → q₅
  • (2, 1/ε) → q₆

q₆: pop 1 สำหรับ 2

  • (2, 1/ε) → q₆
  • ($, I/I) → q₄ (accept)

สตริงที่ยอมรับได้

  • 0ⁿ3ⁿ: 03, 0033, 000333...
  • 1ᵐ2ᵐ: 12, 1122, 111222...
  • 0ⁿ1ᵐ2ᵐ3ⁿ: 0123, 001233, 011223...
  • สตริงว่าง

หมายเหตุ: เป็นการอธิบายทฤษฎี ไม่มีโค้ด C++ ที่ executable