ใช่ไวยากรณ์ไวตามบริบท (CSG) มีประสิทธิภาพเพียงพอที่จะทำการตรวจสอบตัวแปรที่ไม่ได้กำหนด / ไม่ได้ประกาศ / ไม่ได้ผูกไว้ แต่น่าเสียดายที่เราไม่รู้จักอัลกอริธึมที่มีประสิทธิภาพในการแยกสตริงของ CSG
ตัวอย่างจริงของภาษาที่ไวต่อบริบทคือภาษาการเขียนโปรแกรม C คุณลักษณะเช่นประกาศตัวแปรก่อนแล้วจึงใช้ในภายหลังทำให้ภาษา C เป็นภาษาที่คำนึงถึงบริบท (CSL) ( ฉันไม่รู้เกี่ยวกับแคลคูลัสแลมบ์ดาที่ยังไม่พิมพ์ )
และเนื่องจากเราไม่รู้อัลกอริธึมการวิเคราะห์คำเชิงเส้นสำหรับ CSL (หรือ CSG) นั่นคือเหตุผลในการออกแบบคอมไพเลอร์เราใช้ CFG (และการแยกวิเคราะห์ algoritm เท่านั้น) สำหรับการตรวจสอบไวยากรณ์เนื่องจากเรารู้ว่าอัลกอริทึมที่มีประสิทธิภาพในการแยก CFG (ถ้าอยู่ในรูปแบบที่ จำกัด ) คอมไพเลอร์แยกวิเคราะห์คุณลักษณะที่ไม่มีบริบทและจากนั้นจัดการคุณลักษณะที่คำนึงถึงบริบทในลักษณะที่เป็นปัญหา (ตัวอย่างเช่นตรวจสอบตัวแปรที่ใช้ในตารางสัญลักษณ์หากกำหนดไว้มิฉะนั้นจะสร้างข้อผิดพลาด)
นอกจากนี้ยังใช้ไวยากรณ์ไวตามบริบทในการประมวลผลภาษาธรรมชาติ (NLP) และภาษาธรรมชาติส่วนใหญ่เป็นตัวอย่างของภาษาที่ไวต่อบริบท (ฉันไม่แน่ใจภาษาสันสกฤต )
ฉันจะพยายามอธิบายด้วยตัวอย่างที่งี่เง่าแต่เรียบง่าย (เป็นเพียงความคิดคุณสามารถปรับปรุงได้):
NOUN --> { BlueBomber, Grijesh, I, We}
TENSE --> { am, was, is, were}
VERB --> { going, eating, working}
SENTENCE --> <NOUN> <TENSE> <VERB>
ตอนนี้การใช้ไวยากรณ์นี้เราสามารถสร้างคำสั่งที่ถูกต้อง แต่บางอย่างก็ผิดเช่นกัน ตัวอย่างเช่น,
SENTENCE --> <NOUN> <TENSE> <VERB>
Grijesh is working [Correct statement]
แต่
Grijesh am working [wrong statement]
เหตุผล: ค่าของ <TENSE> ขึ้นอยู่กับค่า <NOUN> (เช่นI <TENNSE> --> I am
) และด้วยเหตุนี้ไวยากรณ์ไม่ได้สร้างคำสั่งที่ถูกต้องในภาษาอังกฤษ
ที่จริงแล้วเราไม่สามารถเขียนไวยากรณ์ที่ไม่มีบริบทสำหรับภาษาอังกฤษที่สมบูรณ์!
คุณอาจสังเกตเห็นนักแปลภาษาธรรมชาติหรือตัวตรวจสอบไวยากรณ์ทำงานไม่ถูกต้อง (ลองด้วยคำสั่งยาว ๆ ) เนื่องจากปัญหานี้เกิดขึ้นภายใต้อัลกอริทึมการแยกวิเคราะห์ตามบริบท
REFERENCE : คุณสามารถดูดร. อรุณ Kumar ของการบรรยาย
ในการบรรยายเขาอธิบายสิ่งที่คุณสนใจ