ฉันคิดว่าคำวากยสัมพันธ์น้ำตาลบ่งบอกถึงไวยากรณ์ทางเลือกเพื่อแสดงความหมายพื้นฐานเดียวกัน
ยกตัวอย่างภาษาการเขียนโปรแกรม A ที่มีการดำเนินการsum
ที่สามารถเพิ่มรายการจำนวนเต็มของความยาวโดยพลการ ในภาษานี้เราสามารถเขียนสำนวน
sum []
sum [3, 4, 5, 1]
sum [2, 7]
ผลลัพธ์ของมันคือ 0, 13, และ 9 ตามลำดับ
ทีนี้สมมติว่าเราตระหนักว่า 90% ของเวลาที่เราใช้sum
กับสองข้อโต้แย้งและดังนั้นเราจึงแนะนำเพื่อความสะดวกและสัญกรณ์ใหม่
2 + 7
ซึ่งเป็นเพียงน้ำตาลประโยคsum [2, 7]
สำหรับ
ตอนนี้ใช้ภาษา B ที่สองที่ไม่มีการดำเนินการเพิ่มเติมใด ๆ เราอาจจะมีผู้ประกอบการที่ต้องการ<
, =
ช่วยให้เราเพื่อเปรียบเทียบตัวเลข แต่ไม่มีทางที่จะเพิ่มตัวเลข ในรีลีส 2 ของภาษา B เราแนะนำการเพิ่มใหม่ด้วยไวยากรณ์
2 + 7
ซึ่งจะเพิ่มตัวเลขตามปกติ
ในบริบทของภาษา A, +
สัญกรณ์คือน้ำตาลซินแทคติค (เป็นสัญกรณ์ที่สลับกันง่าย ๆ และมีความสามารถที่สามารถนำมาใช้แทนsum [...]
สัญกรณ์ได้) ในทำนองเดียวกันตามที่ได้รับการชี้ให้เห็นในคำตอบ Hoa ยาวต๋ำใน C สัญกรณ์เป็นน้ำตาลประโยคสำหรับp->field
(*p).field
ในบริบทของภาษา B +
สัญกรณ์ไม่ใช่วากยสัมพันธ์น้ำตาล (เป็นไวยากรณ์ที่ถูกต้องเท่านั้นที่ใช้สำหรับการดำเนินการรวม) ในทำนองเดียวกันถ้า C สามารถเข้าถึงสมาชิกโครงสร้างผ่านพอยน์เตอร์และหากไม่มีสัญกรณ์(*p).field
แล้วสัญกรณ์p->field
ก็จะไม่เป็นน้ำตาลซินแทคติค
ในความคิดของฉันมีบางความเข้าใจผิดเกี่ยวกับวากยสัมพันธ์น้ำตาลที่สามารถย้อนกลับไปเป็นความสับสนเกี่ยวกับความหมายภาษาการเขียนโปรแกรม การให้เหตุผลเป็นไปดังนี้:
- ความหมายของโปรแกรมคือสิ่งที่โปรแกรมคำนวณ
- พลังการแสดงออกของภาษาการเขียนโปรแกรมแสดงโดยการคำนวณที่สามารถอธิบายได้ในภาษานั้น
- สองภาษาการเขียนโปรแกรมที่สามารถอธิบายฟังก์ชั่นที่คำนวณได้ทั้งหมด (ตามที่กำหนดโดยใช้เครื่องทัวริง) มีพลังการแสดงออกที่เหมือนกัน ...
- ... และดังนั้นจึงแตกต่างกันในไวยากรณ์
- ข้อสรุป: ส่วนขยายของภาษาทัวริงที่สมบูรณ์ใด ๆ เป็นเพียงรูปแบบ (น้ำตาลเชิงประโยค) เพราะคุณไม่ได้เปลี่ยนพลังการแสดงออกของภาษา
บรรทัดด้านบนของการให้เหตุผลที่นำไปสู่การยืนยันทั่วไปเช่น "น้ำตาล syntactic ไม่สามารถกำหนดได้อย่างถูกต้อง" มันเป็น "เรื่องของรสนิยม" หรือ "ทุกคุณสมบัติการเขียนโปรแกรมภาษาคือหลังจากทั้งหมดเพียงน้ำตาลประโยค"
ฉันคิดว่าปัญหาหลักในอาร์กิวเมนต์ข้างต้นคือซีแมนทิกส์ไม่เพียงเกี่ยวกับสิ่งที่โปรแกรมสามารถคำนวณได้แต่ยังเกี่ยวกับวิธีการคำนวณเช่นการใช้โครงสร้างแบบดั้งเดิมและวิธีการรวมกัน
ตัวอย่างเช่นวัตถุไม่ได้เป็นน้ำตาล syntactic สำหรับการกำหนดค่าบิตพื้นฐานและการแปลงบิตพวกเขาเป็นโครงสร้างที่ช่วยให้รูปแบบข้อมูลและการดำเนินงานและเพื่ออธิบายการคำนวณ การคำนวณด้วยวัตถุวิธีการการเรียกใช้เมธอดนั้นไม่เหมือนกับการคำนวณด้วยไบต์การลงทะเบียนตัวประมวลผลที่อยู่หน่วยความจำ (แม้ว่าการคำนวณทั้งสองจะมีผลลัพธ์เหมือนกันและแม้ว่าจะใช้การคำนวณครั้งที่สองในการดำเนินการครั้งแรก)
ฉันทำให้คำอธิบายนี้ยาวไปหน่อย แต่ฉันคิดว่ามันเป็นสิ่งสำคัญที่ฉันไม่ได้เห็นในคำตอบอื่น ๆ
Bottom line: น้ำตาล syntactic เป็นไวยากรณ์ทางเลือก (อาจจะสะดวกกว่า) สำหรับการสร้างที่มีอยู่แล้วในภาษาและมีไวยากรณ์ที่กำหนดไว้อย่างดีและความหมาย ไวยากรณ์ใหม่ (น้ำตาลประโยค) แตกต่างจากที่มีอยู่หนึ่ง แต่มีความหมายเดียวกัน หากคุณแนะนำการสร้างใหม่ในภาษาและไวยากรณ์ใหม่สำหรับมันคุณจะไม่มีน้ำตาลในประโยค