คำถามติดแท็ก context-sensitive-grammar

20
C ++ ไม่มีบริบทหรือคำนึงถึงบริบทหรือไม่
ฉันมักจะได้ยินคำกล่าวอ้างว่า C ++ เป็นภาษาที่คำนึงถึงบริบท นำตัวอย่างต่อไปนี้: a b(c); นี่เป็นคำนิยามตัวแปรหรือการประกาศฟังก์ชันหรือไม่ cที่ขึ้นอยู่กับความหมายของสัญลักษณ์ ถ้าcเป็นตัวแปรแล้วa b(c);กำหนดชื่อตัวแปรประเภทb มันจะเริ่มต้นได้โดยตรงกับa cแต่ถ้าcเป็นประเภทแล้วa b(c);ประกาศฟังก์ชั่นที่มีชื่อbที่ใช้และส่งกลับca หากคุณค้นหาคำจำกัดความของภาษาที่ไม่มีบริบทมันจะบอกคุณโดยทั่วไปว่ากฎไวยากรณ์ทั้งหมดต้องมีด้านซ้ายมือที่ประกอบด้วยสัญลักษณ์ที่ไม่ใช่เทอร์มินัล ในทางกลับกันไวต่อไวยากรณ์อนุญาตให้ใช้สตริงของเทอร์มินัลและสัญลักษณ์ที่ไม่ใช่เทอร์มินัลโดยพลการด้านซ้ายมือ การเรียกดูผ่านภาคผนวก A ของ "ภาษาการเขียนโปรแกรม C ++" ฉันไม่สามารถหากฎไวยากรณ์เดียวที่มีสิ่งอื่นนอกเหนือจากสัญลักษณ์ที่ไม่ใช่เทอร์มินัลเดียวที่ด้านซ้ายมือ นั่นหมายความว่า C ++ นั้นไม่มีบริบท (แน่นอนว่าภาษาที่ไม่มีบริบททุกภาษานั้นมีความอ่อนไหวตามบริบทด้วยในแง่ที่ว่าภาษาที่ไม่ใช้บริบทนั้นเป็นส่วนย่อยของภาษาที่คำนึงถึงบริบท แต่นั่นไม่ใช่ประเด็น) ดังนั้น C ++ ไม่มีบริบทหรือตามบริบทหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.