Ký pháp mô tả ngữ pháp ngôn ngữ

Một phần của tài liệu Phân tích mã nguồn c++ phục vụ đánh giá ảnh hưởng của sự thay đổi (Trang 29 - 30)

Ngữ pháp chính thức của ngôn ngữ lập trình Box mới đang được xây dựng cần được mô tả một cách chính xác, việc sử dụng một biểu mẫu Backus-Naur mở rộng (Extended Backus-Naur Form – EBNF) đơn giản kết hợp với các biểu thức chính quy (regular expression) đơn giản có thể đạt được mục tiêu này. Mỗi quy tắc trong ngữ pháp được viết dưới dạng:

Trong quy tắc được mô tả ở trên, vế trái là tên của quy tắc và vế phải là biểu thức của đó. Để tránh nhầm lẫn, tên quy tắc của các quy tắc dạng ký hiệu (symbol) sẽ được viết hoa ký tự đầu tiên, và tên của các quy tắc dạng luật (rule) sẽ được viết thường ký tự đầu tiên. Để đơn giản hoá việc mô tả ngôn ngữ, các ký hiệu đầu cuối (terminal symbol) có thể được định nghĩa bằng các biểu thức chính quy ngắn gọn. Các biểu thức chính quy sau đây sẽ được sử dụng để khớp với một hoặc nhiều ký tự:

[0-9abc] khớp với bất kỳ ký tự nào nằm trong khoảng hoặc danh sách đã đưa ra, ở ví dụ này là mọi ký tự số từ 0 đến 9 và ba chữ cái a, b, c.

[^0-9abc] khớp với bất kỳ ký tự nào không nằm trong khoảng hoặc danh sách đã đưa ra, ở ví dụ này là bất kỳ ký tự nào không phải ký tự số từ 0 đến 9

hoặc ba chữ cái a, b, c.

"string" và ‘string’ khớp với một chuỗi các ký tự nằm bên trong dấu nháy đơn hoặc dấu nháy kép, ở ví dụ này là chuỗi string.

Các biểu thức chính quy này có thể được kết hợp với nhau để khớp các chuỗi phức tạp hơn. Với A và B thể hiện các biểu thức đơn giản, các cách kết hợp có thể của các biểu thức được liệt kê ra sau đây theo thứ tự ưu tiên thực hiện:

(expression) được sử dụng để kết hợp các thành phần con bên trong cặp ngoặc đơn trở thành một thành phần lớn hơn.

A? khớp với thành phần A hoặc khớp với chuỗi rỗng.

A+ khớp với một hoặc nhiều lần lặp lại của thành phần A.

A* khớp với một hoặc nhiều lần lặp lại của thành phần A hoặc khớp với chuỗi rỗng.

AB khớp với thành phần A nối tiếp với thành phần B.

A|B khớp với thành phần A hoặc B.

Một phần của tài liệu Phân tích mã nguồn c++ phục vụ đánh giá ảnh hưởng của sự thay đổi (Trang 29 - 30)