Trong lập trình, chắc hẳn các bạn sẽ thường thấy những lỗi hiển thị lên, chẳng hạn như syntax error. Vậy bạn có biết về khái niệm syntax là gì không? Bài viết dưới đây, chúng tôi sẽ giúp bạn tìm hiểu về khái niệm syntax trong lập trình.
Đang xem: Nghĩa của từ syntax là gì, syntax của ngôn ngữ lập trình
Syntax là gì?
Syntax có nghĩa là cú pháp, nói một cách khác Syntax là cấu trúc hoặc ngữ pháp của ngôn ngữ lập trình. Nó sẽ trả lời cho câu hỏi: ”Làm thế nào để xây dựng một câu ngữ pháp hợp lệ? “. Tất cả các ngôn ngữ đều có ngữ pháp và được sắp xếp theo một quy định.
Syntax là gì?
Chẳng hạn như quy tắc cú pháp của ngôn ngữ lập trình C:
Chúng phân tách các câu lệnh bằng dấu chấm phẩy.Đối với ngôn ngữ C thì đặt biểu thức điều kiện của câu lệnh IF bên trong dấu ngoặc đơn.Nhóm nhiều câu lệnh thành một câu lệnh duy nhất, bằng cách đặt chúng trong dấu ngoặc nhọn.Kiểu dữ liệu và biến cần phải được khai báo trước câu lệnh thực thi đầu tiên. (Tính năng này đã bị bỏ trong C99. Sau này đã cho phép khai báo kiểu hỗn hợp)
Còn về PHP thì cú pháp được viết như sau:
Một tập lệnh PHP sẽ được bắt đầu bằng thẻ Dấu phân cách PHP là Mỗi một câu lệnh PHP được kết thúc bằng dấu chấm phẩy.Tên biến trong PHP thường được viết hoa.Các keyword, function và class name sẽ không phân biệt chữ hoa hay chữ thường.
Các cấp độ của cú pháp
Cú pháp ngôn ngữ máy tính thường được phân biệt thành 3 cấp độ:
Cấp độ 1: Từ – cấp độ từ vựng, xác định các ký tự hình thành mã thông báo.Cấp độ 2: Cụm từ – cấp độ ngữ pháp, nói một cách khác đó là xác định cách mà thể có thể tạo thành một cụm từ.Cấp độ 3: Bối cảnh – xác định những đối tượng hoặc tên tham chiếu đến, nếu như các loại đó là hợp lệ.
Nếu phân biệt theo cách này thì nó sẽ mang lại tính modun, cho phép mỗi mức được mô tả và xử lý riêng biệt và thường độc lập.
Các cấp độ của syntax
Đầu tiên, lexer sẽ biến chuỗi ký tự tuyến tính thành chuỗi mã thông báo tuyến tính. Điều này được gọi là phân tích từ vựng hoặc từ vựng. Thứ 2, trình phân tích cú pháp biến chuỗi tuyến tính của các mã thông báo thành một cây phân tích cú pháp phân cấp. Điều này được gọi là phân tích cú pháp. Thứ 3 đó là, phân tích ngữ cảnh giải quyết tên và kiểm tra các loại. Modun này đôi khi có thể xảy ra, nhưng trong nhiều ngôn ngữ trong thế giới thực, bước sớm hơn phụ thuộc vào những bước sau.
Ví dụ như là: hack lexer trong C, là vì mã hóa phụ thuộc vào ngữ cảnh. Ngay cả trong những trường hợp này, phân tích cú pháp thường được coi là gần đúng với những mô hình lý tưởng.
Xem thêm: Một Đơn Vị Cacbon (1 Đvc Là Gì ? Nguyên Tố Hóa Học Là Gì
Bản thân giai đoạn cú pháp có thể được chia thành 2 phần đó là: cây phân tích cú pháp, hoặc cây cú pháp cụ thể. Được xác định bởi ngữ pháp, nhưng nói chung là quá chi tiết để có thể sử dụng thực tế và cây cú pháp trừu tượng (AST), giúp đơn giản hóa này thành một hình thức mà có thể sử dụng được AST và những bước phân tích theo ngữ cảnh có thể sử dụng được. AST và các bước phân tích theo ngữ cảnh có thể được coi là một dạng phân tích ngữ nghĩa vì chúng bổ sung ý nghĩa và diễn giải cho cú pháp. Hoặc nói cách khác thì triển khai thủ công, không chính thức các quy tắc cú pháp mà sẽ khó hoặc khó thực hiện khi mô tả hoặc triển khai một cách chính thức.
Các cấp thường tương ứng với các cấp trong hệ thống phân cấp của chomsky. Các từ thuộc ngôn ngữ thường, được chỉ định trong ngữ pháp từ vựng, là ngữ pháp loại 3, thường được coi là biểu thức chính quy. Các cụm từ ở ngôn ngữ không có ngữ cảnh (CFL), nói chung là ngôn ngữ không có ngữ cảnh xác định (DCFL), được chỉ định trong ngữ pháp cấu trúc cụm từ đó là ngữ pháp loại 2, chúng thường được đưa ra dưới dạng quy tắc sản xuất ở dạng Backus Naur (BNF). Các ngữ pháp cụm từ thường được chỉ định trong các ngữ pháp hạn chế hơn nhiều so với các ngữ pháp hoàn toàn không có ngữ cảnh. Để làm cho chúng dễ dàng hơn để phân tích được cú pháp.
Về nguyên tắc, cấu trúc theo ngữ cảnh có thể được mô tả bằng ngữ pháp nhạy cảnh với ngữ cảnh và được phân tích tự động bằng các phương tiện cũng như ngữ pháp thuộc tính. Tuy nhiên, bước này được thực hiện theo một cách thủ công, thông qua những quy tắc phân giải tên và kiểm tra kiểu và được thực hiện thông qua bảng ký hiệu nơi mà lưu trữ tên và các loại cho từng phạm vi.
So sánh cú pháp với ngữ nghĩa
Cú pháp là một ngôn ngữ mô tả hình thức của một chương trình hợp lệ, nhưng không cung cấp bất kỳ thông tin nào về ý nghĩa của chương trình hay kết quả của việc thực hiện chương trình đó. Ý nghĩa được đưa ra cho một tổ hợp các ký hiệu được xử lý bằng ngữ nghĩa.
So sánh syntax và grammar
Không phải tất cả các chương trình đúng về mặt cú pháp đều đúng về mặt ngữ nghĩa. Tuy nhiên có nhiều chương trình đúng về mặt cú pháp lại không được hình thành, theo các quy tắc của ngôn ngữ. Và nó có thể dẫn đến lỗi khi dịch hoặc thực thi. Trong một số trường hợp, các chương trình như vậy có thể thể hiện được hành vi không xác định. Ngay cả khi một chương trình được xác định rõ ràng trong một ngôn ngữ, nó vẫn có thể có ý nghĩa mà người viết nó không chủ định.
Còn ngữ nghĩa là về nghĩa của câu. Nó sẽ trả lời cho câu hỏi: Câu này có hợp lệ hay không? Câu đó có nghĩa là gì?
Ví dụ:
Đây là các câu lệnh C có giá trị cú pháp. Họ muốn nói gì? Thậm chí nó có hợp lệ để cố gắng chuyển đổi các câu lệnh này thành một chuỗi những hướng dẫn thực thi hay không? Những câu hỏi này sẽ tập trung vào nghĩa của câu.
Xem thêm: Tìm Hiểu Về Socket 1155 Là Gì ? Có Những Loại Socket Nào Đây Là Danh Sách Tất Cả Các Socket Cpu
Đầu tiên hãy xem xét toán tử ++ ở trong câu lệnh đầu tiên. Trước hết, nó có hợp lệ để có thể thử cái này không?
Nếu x là một kiểu dữ liệu float, câu lệnh này không có nghĩa (dựa theo nguyên tắc của ngôn ngữ C) và do đó, nó là một lỗi mặc dù câu lệnh đó đúng về mặt cú pháp.Nếu x là con trỏ đó tới một số loại dữ liệu, ý nghĩa của câu lệnh là “thêm sizeof – một số loại dữ liệu vào giá trị tại địa chỉ x và lưu kết quả đó vào vị trí tại địa chỉ x.”Nếu x là một vô hướng thì ý nghĩa của câu lệnh là “ thêm vào một giá trị tại địa chỉ x và lưu kết quả đó vào tại địa chỉ x”.
Có một lưu ý rằng, một số ngữ nghĩa không thể được xác định tại thời gian biên dịch và do đó cần phải được đánh giá tại thời điểm chạy. Trong ví dụ trên về toán tử ++, nếu x đã ở giá trị tối đa cho kiểu dữ liệu của nó. Điều gì sẽ xảy ra nếu bạn cố gắng thêm 1 vào nó?
Trên đây là toàn bộ thông tin về cú pháp, hy vọng những chia sẻ trên sẽ giúp bạn hiểu rõ hơn được phần nào về khái niệm Syntax là gì? Để có thể phục vụ bạn trên con đường học lập trình của mình. Chúc các bạn thành công!