1
ค้นหาชุดดังต่อไปนี้
ความท้าทายด้านล่างกำหนดให้คุณต้องคุ้นเคยกับทฤษฎี parser อย่างเป็นทางการหากคุณไม่ทราบว่าคำถามนี้ถามอะไรเพราะคุณไม่รู้ว่าคำศัพท์หมายถึงไวยากรณ์และบริบทชุดแรก / ชุดติดตามตามที่ครอบคลุมในหลักสูตรมหาวิทยาลัยจำนวนมาก ฉันสามารถแนะนำหลักสูตรสแตนฟอร์ดนี้โดยเฉพาะเอกสารประกอบคำบรรยาย 08 และ 09 (จากหน้า 7) ฉันได้แยกไฟล์โกงออกมาจากเอกสารประกอบคำบรรยายเหล่านี้แล้ว - ฉันแนะนำให้ทุกคนที่พยายามอ่านข้อท้าทายนี้ผมขอแนะนำให้ทุกคนพยายามที่ท้าทายนี้จะอ่านมัน เขียนโปรแกรมหรือฟังก์ชั่นที่ให้ไวยากรณ์ที่ไม่มีบริบทพบชุดต่อไปนี้ของ nonterminal ทุกชุด อย่างไม่เป็นทางการชุดติดตามที่ไม่ใช่เทอร์มินัลคือชุดของเทอร์มินัลและ$(หมายถึงจุดสิ้นสุดของอินพุต) ที่คุณสามารถค้นหาเทอร์มินัลนั้นในประโยคที่ถูกต้อง อินพุตถูกกำหนดเป็นสตริง ASCII เดียวที่พิมพ์ได้หรืออาร์เรย์ของบรรทัด ASCII ที่พิมพ์ได้ คุณสามารถส่งออกชุดในรูปแบบที่เหมาะสมโดยใช้$(ไม่ว่าจะเป็นตัวอักษรออกหรือสตริงภายในชุด ฯลฯ ) เพื่อระบุจุดสิ้นสุดของการป้อนข้อมูล คุณอาจจะสมมติว่าอินพุตนั้นใช้ได้เสมอตามรูปแบบด้านล่าง บริบทของไวยากรณ์ฟรีถูกกำหนดในลักษณะที่ง่ายมาก ทุกบรรทัดมีการผลิตรายการเดียว ทุกการผลิตคือรายการสัญลักษณ์คั่นด้วยช่องว่าง เทอร์มินัลคือสตริงของอักขระที่ล้อมรอบด้วยอะโพสโทรฟี (เช่น'**' ) เพื่อความง่ายคุณอาจสมมติว่าเทอร์มินัลไม่มีช่องว่าง แต่มันจะดีถ้าโปรแกรมของคุณอนุญาต nonterminal อาจจะเป็นสตริงใด ๆ $ที่ไม่มีช่องว่างหรือ การผลิตที่ว่างเปล่า (ปกติระบุด้วยε) เป็นเพียงบรรทัดที่มีเฉพาะที่ไม่ใช่ด้านซ้ายมือ บรรทัดแรกคือการผลิตที่กำหนดสัญลักษณ์เริ่มต้น เป็นตัวอย่างไวยากรณ์ต่อไปนี้: S → aSa | …