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

สร้าง Pushdown Automata สำหรับภาษา L = {a²ᵐc⁴ⁿdⁿbᵐ | m,n ≥ 0} ใน C++

บทความนี้อธิบายการสร้าง Pushdown Automaton (PDA) สำหรับภาษาที่มีเงื่อนไข:

  • จำนวน 'a' = 2 × จำนวน 'b'
  • จำนวน 'c' = 4 × จำนวน 'd'
  • m,n ≥ 0 (รวมสตริงว่าง)

องค์ประกอบของ PDA

  • Input tape
  • Control unit (states)
  • Stack ขนาดไม่จำกัด

PDA เป็น 7-tuple: (Q, Σ, S, δ, q₀, I, F)

การออกแบบ State และ Transition

State q₀: เริ่มต้น รับ a และ c

  • (a, I/aI) → q₀: push a
  • (c, I/cI) → q₀: push c
  • (a, a/aa) → q₀: push a
  • (c, c/cc) → q₀: push c
  • (b, a/ε, pop 2a) → q₃: เริ่ม pop a สำหรับ b
  • (c, a/ca) → q₁: เปลี่ยนไปรับ c
  • (d, c/ε, pop 4c) → q₄: เริ่ม pop c สำหรับ d
  • ($, I/I) → q₅: สตริงว่าง

State q₁: รับ c ต่อ

  • (c, c/cc) → q₁
  • (d, c/ε, pop 4c) → q₂

State q₂: pop c สำหรับ d แล้วไป pop a สำหรับ b

  • (d, c/ε, pop 4c) → q₂
  • (b, a/ε, pop 2a) → q₃

State q₃: pop a สำหรับ b

  • (b, a/ε, pop 2a) → q₃
  • ($, I/I) → q₅ (accept)

State q₄: pop c สำหรับ d จนหมด

  • (d, c/ε, pop 4c) → q₄
  • ($, I/I) → q₅ (accept)

State q₅: Accept state

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

  • c⁴ⁿdⁿ: ccccd, ccccccccdd, ...
  • a²ᵐbᵐ: aab, aaaabb, ...
  • a²ᵐc⁴ⁿdⁿbᵐ: aaccccdb, aaaaccccccccddbb, ...
  • สตริงว่าง (ε)

หมายเหตุ: บทความนี้เป็นทฤษฎี ไม่มีโค้ด C++ ที่รันได้จริง เนื่องจาก PDA เป็นแบบจำลองทางทฤษฎี