Trong khoa học máy tính, **cú pháp đặc biệt** (tiếng Anh: *syntactic sugar*, nghĩa đen là "kẹo đường cú pháp") là cú pháp trong một ngôn ngữ lập trình được thiết kế để làm cho mọi thứ dễ đọc hay thể hiện hơn. Nó khiến ngôn ngữ "ngọt ngào hơn" cho con người sử dụng: mọi thứ có thể được thể hiện rõ ràng hơn, chính xác hơn, hay theo một cách khác mà một số người khác thích.

Ví dụ, nhiều ngôn ngữ lập trình cung cấp cú pháp đặc biệt để tham chiếu và cập nhật các phần tử của mảng (*array*). Một cách tóm tắt, tham chiếu mảng là một thủ tục với 2 đối số: một mảng và một vector chỉ số, có thể được biểu diễn như `get_array(Array, vector(i,j))`. Thay vì vậy, nhiều ngôn ngữ cung cấp cú pháp như `Array[i,j]`. Tương tự như vậy, cập nhật phần tử của một mảng là một thủ với 3 đối số, như `set_array(Array, vector(i,j), value)`, nhưng nhiều ngôn ngữ cung cấp cú pháp `Array[i,j] = value`.

Một cách cụ thể, một cấu trúc trong ngôn ngữ được gọi là "cú pháp đặc biệt" nếu nó có thể được gỡ bỏ khỏi ngôn ngữ mà không gây bất kì ảnh hưởng tới chức năng của ngôn ngữ đó: chức năng và năng lực biểu hiện vẫn như cũ.

Các bộ xử lý ngôn ngữ, bao gồm trình biên dịch, bộ phân tích tĩnh, và các loại tương tự, thường mở rộng các cấu trúc đặc biệt thành các cấu trúc cơ bản hơn trước khi xử lý, và quá trình này được gọi là "desugaring" (dịch nôm na là "khử đường").

Nguồn gốc
---------

Thuật ngữ gốc *syntactic sugar* được Peter J. Landin đặt ra vào năm 1964 để mô tả cú pháp bề mặt của một ngôn ngữ lập trình đơn giản giống như ALGOL.

Ví dụ nổi bật
-------------

* Trong COBOL, nhiều từ khóa trung gian là cú pháp đặc biệt có thể được bỏ qua. Ví dụ, câu `MOVE A B.` và câu `MOVE A TO B.` thực hiện chính xác cùng một chức năng, nhưng câu sau khiến hành động được thực hiện rõ ràng hơn.

Ghi chú
-------

1. ↑  Landin, Peter J. (1964). "The mechanical evaluation of expressions" (PDF). *The Computer Journal*. Computer Journal. **6** (4): 308–320. doi:10.1093/comjnl/6.4.308. Truy cập ngày 21 tháng 7 năm 2014.
2. ↑  Abelson & Sussman 1996, Chapter 1, footnote 11.Lỗi sfn: không có mục tiêu: CITEREFAbelsonSussman1996 (trợ giúp)

Tham khảo
---------

* Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie (1996) [1984]. *Structure and Interpretation of Computer Programs*. Cambridge, MA: MIT Press. ISBN 0-262-51087-1.
* Landin, Peter J. (February–March 1965). "A Correspondence Between ALGOL 60 and Church's Lambda-Notation: Parts I and II". *Communications of the ACM*. **8** (2.3): 89–101, 158–165. doi:10.1145/363744.363749.
* Landin, Peter J. (tháng 3 năm 1965). "Programming Without Imperatives – An Example". *UNIVAC Systems Programming Research*.
* Landin, Peter J. (tháng 7 năm 1965). "Getting Rid of Labels". *UNIVAC Systems Programming Research*.
* Landin, Peter J. (tháng 8 năm 1965). "A Generalization of Jumps and Labels". *UNIVAC Systems Programming Research*. reprinted in "*Higher-Order and Symbolic Computation*". **11**. 1998: 125–143. CiteSeerX 10.1.1.85.2610. Chú thích journal cần `|journal=` (trợ giúp)
* Perlis, A. J. (tháng 9 năm 1982). "Epigrams on programming". *ACM SIGPLAN Notices*. New York, NY, USA: Association for Computing Machinery. **17** (9): 7–13. doi:10.1145/947955.1083808. Bản gốc lưu trữ ngày 17 tháng 1 năm 1999.

Bài viết này dựa trên nguồn lấy từ *Từ điển trực tuyến miễn phí về máy tính*  trước ngày 1 tháng 11 năm 2008 và được hợp nhất theo các điều khoản "cấp lại giấy phép" của GFDL, phiên bản 1.3 hoặc mới hơn.