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

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

ภาษาที่: จำนวน 0 = จำนวน 1 + จำนวน 2

State และ Transition

q₀: รับ 0 แล้วจับคู่กับ 1 หรือ 2

  • (0, I/0I) → q₀: push 0
  • (0, 0/00) → q₀: push 0
  • (1, 0/ε) → q₁: pop 0 สำหรับ 1
  • (2, 0/ε) → q₂: pop 0 สำหรับ 2
  • ($, I/I) → qf: สตริงว่าง

q₁: pop 0 สำหรับ 1 แล้วอาจเจอ 2

  • (1, 0/ε) → q₁: pop 0 สำหรับ 1
  • ($, I/I) → qf: accept (0ᵐ1ᵐ)
  • (2, 0/ε) → q₂: pop 0 สำหรับ 2 (หลังจบ 1 แล้ว)

q₂: pop 0 สำหรับ 2

  • (2, 0/ε) → q₂
  • ($, I/I) → qf: accept

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

  • 0ⁿ2ⁿ: 02, 0022... (m=0)
  • 0ᵐ1ᵐ: 01, 0011... (n=0)
  • 0ⁿ⁺ᵐ1ᵐ2ⁿ: 0012, 000112... (m,n>0)
  • สตริงว่าง

หลักการ: Push 0 ทั้งหมดก่อน แล้ว pop ตรง 1 แล้ว pop ตรง 2