Bước tới nội dung

Lỗi cú pháp

Bách khoa toàn thư mở Wikipedia

Trong khoa học máy tính, một lỗi cú pháp (tiếng Anh: syntax error) là một lỗi về cú pháp của một chuỗi các ký tự hoặc dấu hiệu được dự định viết trong thời gian biên dịch. Một chương trình sẽ không biên dịch cho đến khi tất cả các lỗi cú pháp được sửa lại. Tuy nhiên, đối với các ngôn ngữ được thông dịch, một lỗi cú pháp có thể được phát hiện trong khi thực hiện chương trình và các thông báo lỗi của trình thông dịch có thể không phân biệt các lỗi cú pháp với các lỗi khác.

Có một số ý kiến bất đồng khi nói xem những lỗi nào là "lỗi cú pháp". Ví dụ, một số người cho rằng việc sử dụng giá trị của một biến chưa được khởi tạo trong ngôn ngữ Java là một lỗi cú pháp, nhưng nhiều người khác không đồng ý[1][2] và phân loại đây là lỗi ngữ nghĩa tĩnh.

Trong các máy tính gia đình 8-bit sử dụng trình thông dịch BASIC làm giao diện người dùng chính, tin nhắn lỗi SYNTAX ERROR trở nên có phần nổi tiếng, vì đây là phản hồi cho bất kỳ lệnh hoặc đầu vào nào của người dùng mà trình thông dịch không thể phân tích được cú pháp.

Lỗi cú pháp cũng có thể xảy ra khi một phương trình không hợp lệ được nhập vào máy tính bỏ túi. Ví dụ, lỗi này có thể bị xảy ra khi mở ngoặc mà không đóng ngoặc, hoặc ít phổ biến hơn là nhập nhiều dấu phẩy vào một số.

Sau đây là một câu lệnh Java đúng về mặt cú pháp:

System.out.println("Hello World");

trong khi câu lệnh sau đây thì không:

System.out.println(Hello World);

Về mặt lý thuyết, ví dụ thứ hai sẽ in biến Hello World thay vì từ Hello World. Tuy nhiên, một biến trong Java không thể có khoảng trắng ở giữa, vì vậy dòng lệnh đúng về mặt cú pháp sẽ là System.out.println(Hello_World).

Một trình biên dịch sẽ gắn cờ một lỗi cú pháp khi mã nguồn được cung cấp không đáp ứng các yêu cầu của ngữ pháp ngôn ngữ đó.

Lỗi định kiểu (chẳng hạn như cố gắng dùng toán tử tăng ++ cho biến luận lý (boolean) trong Java) và lỗi biến không khai báo đôi khi được coi là lỗi cú pháp khi chúng được phát hiện tại thời điểm biên dịch. Tuy nhiên,người ta thường phân loại các lỗi đó là các lỗi ngữ nghĩa tĩnh.[2][3][4]

Máy tính bỏ túi

[sửa | sửa mã nguồn]
Lỗi cú pháp trong một máy tính khoa học

Lỗi cú pháp là một trong số các loại lỗi trên máy tính bỏ túi (thường thấy trên máy tính khoa họcmáy tính vẽ đồ thị), biểu thị rằng đầu vào được nhập có cú pháp không chính xác về số, phép toán, v.v.. Nó có thể xảy ra theo nhiều cách khác nhau, bao gồm nhưng không giới hạn ở:

  • Một dấu ngoặc mở mà không có dấu đóng ngoặc tương ứng (trừ trường hợp ở cuối phương trình thì không cần thiết)
  • Sử dụng dấu trừ thay vì dấu âm (hoặc ngược lại), điều này khác biệt trên hầu hết các máy tính khoa học. Lưu ý rằng trong khi một số máy tính khoa học cho phép dấu trừ thay cho dấu âm, dấu âm ít khi dùng thay được cho dấu trừ..
  • Thiếu số trong một phép tính (ví dụ: "12×+5" bị thiếu một số giữa dấu × và +)

Chúng không nên bị nhầm lẫn với các lỗi toán học (ví dụ như lỗi chia cho 0 hoặc phương trình có kết quả quá lớn để máy có thể hiển thị được). Hầu hết các máy tính phi khoa học (không phải máy tính khoa học) không có sự phân biệt giữa các dạng lỗi khác nhau (thường được hiển thị bằng chữ E), chủ yếu là do đầu vào kém linh hoạt hơn (để ngăn chặn lỗi cú pháp). Một số máy tính (đặc biệt là máy tính khoa học) cũng có các loại lỗi khác, chẳng hạn như lỗi ngăn xếp (stack error) và lỗi đối số (argument error).

Tham khảo

[sửa | sửa mã nguồn]
  1. ^ Issue of syntax or semantics?
  2. ^ a b Semantic Errors in Java
  3. ^ Aho, Alfred V.; Monica S. Lam; Ravi Sethi; Jeffrey D. Ullman (2007). Compilers: Principles, Techniques, and Tools (ấn bản thứ 2). Addison Wesley. ISBN 978-0-321-48681-3.
  4. ^ Louden, Kenneth C. (1997). Compiler Construction: Principles and Practice. Brooks/Cole. ISBN 981-243-694-4. Exercise 1.3, pp.27–28.