คุณสามารถลองใช้ pushdown ออโตมาตะได้ เมื่อได้รับการผลักอัตโนมัติหุ่นยนต์สำหรับภาษาต้นฉบับเราสร้างหนึ่งสำหรับการเปลี่ยนวงจร ออโตมาตาใหม่ทำงานในสองขั้นตอนซึ่งสอดคล้องกับและส่วนของคำว่า (โดยที่อยู่ในภาษาดั้งเดิม) ในระยะแรกเมื่อใดก็ตามที่หุ่นยนต์ต้องการที่จะปรากฏขึ้นที่ไม่ใช่เทอร์มินัลก็สามารถผลักดันที่ไม่ใช่เทอร์มินัล ; แนวคิดคือในตอนท้ายของสเตจแรกสแต็กจะมีสัญลักษณ์ที่พบในสแต็กหลังจากอ่านโดยออโตเมติกดั้งเดิม ในขั้นตอนที่สอง (สวิตช์ไม่ใช่แบบไม่กำหนดค่า) แทนการกดไม่ใช่ขั้วx y x x y A A ′ x AyxyxxyAA′xAเราได้รับอนุญาตให้ปรากฏไม่ใช่ขั้วA'หากออโตมาตาดั้งเดิมสามารถสร้างสแต็คได้เมื่ออ่านดังนั้นจะสามารถสร้างสแต็กใหม่ทั้งหมดได้ xA′x
แก้ไข: นี่คือรายละเอียดเพิ่มเติมบางส่วน สมมติว่าเราได้รับ PDA ที่มีตัวอักษร , ชุดของสถานะ , ชุดของการยอมรับสถานะ , ไม่ใช่เทอร์มินัล , สถานะเริ่มต้นและชุดของการเปลี่ยนที่อนุญาต แต่ละการเปลี่ยนแปลงที่อนุญาตคือแบบฟอร์มซึ่งหมายความว่าเมื่ออยู่ในสถานะเมื่ออ่าน (หรือซึ่งในกรณีนี้เป็นการเปลี่ยนผ่านฟรี) ถ้าบนสุดของสแต็กคือ (หรือซึ่งหมายถึงสแต็กว่างเปล่า) จากนั้น PDA สามารถ (เป็นรูปแบบที่ไม่ได้กำหนดไว้) ย้ายไปยังสถานะแทนที่Q F Γ Q 0 ( Q , , , Q ' , α ) Q ∈ = ε ∈ Γ = ε Q 'ΣQFΓq0(q,a,A,q′,α)qa∈Aa=ϵA∈ΓA=ϵq′Aกับ *α∈Γ∗
PDA ที่ใหม่ที่มีใหม่ที่ไม่ใช่ขั้วสำหรับแต่ละ\ ทุก ๆ สองรัฐและมีสองรัฐA) สถานะเริ่มต้น (สถานะเริ่มต้นจริงถูกเลือกแบบไม่กำหนดขึ้นในหมู่พวกเขาผ่าน ∈ แกมมาQ , Q ' ∈ Q ∈ แกมมา∪ { ε } ( Q , Q ' , 1 ) , ( Q , Q ' , 2 , )A′A∈Γq,q′∈QA∈Γ∪{ϵ}(q,q′,1),(q,q′,2,A) -transitions) เป็น ( Q , Q , 1 ) สำหรับแต่ละช่วงการเปลี่ยนภาพ ( q , a , A , q ′ , α )มีการเปลี่ยนที่สอดคล้องกัน ( ( q ,ϵ(q,q,1)(q,a,A,q′,α)และ ( ( q , q ″ , 2 , B ) , a , A , ( q ′ , q ″ , 2 , B ) , α ) มีการเปลี่ยนอื่น ๆ เช่นกัน((q,q′′,1),a,A,(q′,q′′,1),α)((q,q′′,2,B),a,A,(q′,q′′,2,B),α)
สำหรับแต่ละช่วงการเปลี่ยนภาพมีการเปลี่ยนภาพ( ( q , q ″ , 1 ) , a , B ′ , ( q ′ , q ″ , 1 ) , B ′ A ′ α )ที่B ∈ แกมมา∪ { ε }และε ' =(q,a,A,q′,α)((q,q′′,1),a,B′,(q′,q′′,1),B′A′α)B∈Γ∪{ϵ}ε สำหรับทุกรัฐสุดท้าย Q ∈ Fมีการเปลี่ยน ( ( Q , Q " , 1 ) , ε , , ( Q 0 , Q " , 2 , ε ) , )ที่ ∈ แกมมา∪ { ε }ϵ′=ϵq∈F((q,q′′,1),ϵ,A,(q0,q′′,2,ϵ),A)A∈Γ∪{ϵ}
สำหรับการเปลี่ยนภาพทุกครั้งมีการเปลี่ยนภาพ( ( q , q ″ , 2 , A ) , a , B ′ , ( q ′ , q ″ , 2 , A ) , B ′ α )ที่∈ แกมมา∪ { ε } สำหรับทุกการเปลี่ยนแปลง(q,a,ϵ,q′,α)((q,q′′,2,A),a,B′,(q′,q′′,2,A),B′α)A∈Γ∪{ϵ} , มีการเปลี่ยน ( ( q , q ″ , 2 , B ) , a , A ′ , ( q ′ , q ″ , 2 , A ) , ϵ )โดยที่ B ∈ แกมมา∪ { ε } สำหรับการเปลี่ยนแปลงทุกครั้ง ( q , a(q,a,ϵ,q′,A)((q,q′′,2,B),a,A′,(q′,q′′,2,A),ϵ)B∈Γ∪{ϵ}มี "ช่วงการเปลี่ยนภาพทั่วไป" ( ( q , q ″ , 2 , C ) , a , B ′ A , ( q , q ″ , 2 , C ) , ϵ ) ; สิ่งเหล่านี้ถูกนำมาใช้เป็นลำดับของการเปลี่ยนผ่านสองสถานะใหม่ระดับกลาง การเปลี่ยนแปลง ( q , a , ϵ , q ′ ,(q,a,A,q′,B)((q,q′′,2,C),a,B′A,(q,q′′,2,C),ϵ)กับ | α | ≥ 2ได้รับการจัดการในทำนองเดียวกัน สำหรับการเปลี่ยนภาพทุกครั้ง ( q , a , A , q ′ , A )มีการเปลี่ยนภาพ ( ( q , q ″ , 2 , A ) , a , B , ( q ′ , q ″ , 2 , A ) , B ) , ที่ B ∈(q,a,ϵ,q′,α)|α|≥2(q,a,A,q′,A)((q,q′′,2,A),a,B,(q′,q′′,2,A),B) } ช่วงการเปลี่ยนภาพ ( q , a , A , q ′ , A α )ได้รับการจัดการในทำนองเดียวกัน ในที่สุดก็มี แต่เพียงผู้เดียวสุดท้ายรัฐฉและการเปลี่ยน ( ( Q , Q , 2 , ) , ε , ε , F , ε )B∈Γ′∪{ϵ}(q,a,A,q′,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)
(อาจมีช่วงการเปลี่ยนภาพเล็กน้อยที่ฉันพลาดและรายละเอียดบางส่วนที่ฉันไม่ได้ดูค่อนข้างยุ่ง)
จำเรากำลังพยายามที่จะยอมรับคำที่x y ที่ได้รับการยอมรับจาก PDA เดิม รัฐ( Q , Q ' , 1 )หมายความว่าเรากำลังอยู่ในขั้นตอนที่ 1, ที่รัฐQและ PDA เดิมที่รัฐQ 'หลังจากที่ได้อ่านx รัฐ( Q , Q ' , 2 , )จะคล้ายกันที่สอดคล้องกับสุดท้าย'ที่โผล่ ที่ด่าน 1 เราได้รับอนุญาตให้ผลักA ′yxxy(q,q′,1)qq′x(q,q′,2,A)AA′A′แทนการ popping เราทำอย่างนั้นไม่ใช่สำหรับแต่ละขั้วที่ผลิตในขณะที่การประมวลผลxแต่โผล่เท่านั้นในขณะที่การประมวลผลY ในขั้นตอนที่ 2 เราได้รับอนุญาตให้ปรากฏ'แทนการผลักดัน ถ้าเราทำเช่นนี้แล้วเราต้องจำไว้ว่าด้านบนของหุ้นมัน; นี้ใช้เฉพาะเมื่อไม่มีสิ่ง "ชั่วคราว" ในกองซึ่งจำลอง PDA เป็นเช่นเดียวกับด้านบนของสแต็คเป็นεหรือในรูปแบบB 'AxyA′AAϵB′
นี่คือตัวอย่างง่ายๆ พิจารณาหุ่นยนต์สำหรับที่ผลักดันสำหรับแต่ละxและปรากฏสำหรับแต่ละปี ออโตใหม่ยอมรับคำพูดของทั้งสองรูปแบบ: Y k x n Y n - kและx k Y n x n - k สำหรับคำพูดของรูปแบบครั้งแรก, ระยะที่ 1 ประกอบด้วยการผลักดันkครั้ง' , ระยะที่ 2 ประกอบด้วย popping kครั้ง'ผลักดันnxnynAxAyykxnyn−kxkynxn−kkA′kA′ครั้งและ popping n - kครั้ง สำหรับคำพูดของรูปแบบที่สองครั้งแรกที่เราผลักดัน kครั้งแล้วปรากฏ kครั้งดัน n - kครั้ง 'เปลี่ยนไปขั้นตอนที่ 2 และ pop n - kครั้ง'n−kAn−kAkAkAn−kA′n−kA′
นี่คือตัวอย่างที่มีความซับซ้อนมากขึ้นสำหรับภาษาของวงเล็บที่มีความสมดุลในประเภทต่างๆ ("()", "[]", "<>") ที่ลูกหลานของวงเล็บแต่ละประเภทจะต้องอยู่ในประเภทที่แตกต่างกัน ตัวอย่างเช่น "([] <>)" ก็โอเค แต่ "()" ผิด สำหรับแต่ละ "(" เราผลักดันถ้าด้านบนของสแต็คไม่สำหรับแต่ละ ")" เรา pop ในทำนองเดียวกันB , Cเกี่ยวข้องกับ "[]" และ "<>" นี่คือวิธีที่เรายอมรับคำว่า ">) ([()] <" เราใช้คำว่า ">)" กดC ′ A ′และเปลี่ยนไปยังสเตจ 2 เราบริโภค "(" popping 'และความทรงจำด้านบนของสแต็ค เราใช้ "[()]" ผลักและ poppingA AABCC′A′A′A ; เมื่อกด Bเราจะทราบว่า "จริง" บนสุดของสแต็กคือ Aและอนุญาตให้ใช้วงเล็บเหลี่ยม (เราจะไม่ถูกหลอกโดย ">) (() <"); เมื่อกด Aเนื่องจากด้านบนสุดของสแต็กคือ B (ซึ่งไม่ใช่ ϵหรือของรูปแบบ X ′ ) จากนั้นเราทราบว่า Bเป็น "บนสุดของ" สแต็คที่แท้จริง "เช่นกันและอนุญาตให้ใช้เครื่องหมายวงเล็บกลมได้ ( แม้ว่าเงาบนสุดของสแต็กคือ A ) สุดท้ายเรากิน "<" และ pop C 'BABAABϵX′BAC′