ANTLR hỗ trợ EBNF (Extended Backus-Naur Form), mở rộng của BNF(Backus- Naur Form), một phƣơng pháp hình thức để đặc tả các thành phần của ngôn ngữ, mỗi thành phần là một rule (qui tắc). Theo đó, ngữ pháp BNF đƣợc bổ sung thêm các phép lặp và phép chọn cũng nhƣ các qui tắc con (subrule - một phần tử độc lập hoặc một khối trong dấu ngoặc) để mô tả ngắn gọn về ngữ pháp, khá linh động cho việc mở rộng cú pháp ngôn ngữ. Về chi tiết EBNF chúng ta tham khảo ở nhiều tài liệu khác nhau [18] và có thể tổng quát hóa cú pháp của nó theo các rule nhƣ Bảng 4.1 sau:
Bảng 4.1 Tổng quát hóa các rule của EBNF [18] (Các subrule trong dấu ‹‹…›› là một đoạn cú pháp)
STT SƠ ĐỒ ĐƢỜNG THỂ HIỆN
CẤU TRÚC CỦA RULE KÝ HIỆU/MÔ TẢ
1
( ‹‹X››|‹‹Y››|‹‹Z››)
Chọn một phần tử bất kỳ trong số các phần tử X, Y, Z
45
2 X?Có thể chọn phần tử X hoặc không chọn
3
( ‹‹X››|‹‹Y››|‹‹Z››)?
Chọn một phần tử bất kỳ trong số các phần tử X, Y, Z hoặc không chọn phần tử nào
4 X*
Không chọn phần tử X hoặc chọn nhiều lần X
5
( ‹‹X››|‹‹Y››|‹‹Z››)*
Không chọn phần tử nào hoặc chọn nhiều lần các phần tử X, Y, Z 6 X+ Chọn phần tử X một hoặc nhiều lần 7 ( ‹‹X››|‹‹Y››|‹‹Z››)+ Chọn các phần tử X, Y, Z một hoặc nhiều lần
Ta có thể lấy một ví dụ nhỏ để minh chứng cho việc sử dụng các qui ƣớc trong ANTLR: Ví dụ 4.1:
Đặc tả với một qui tắc variable thể hiện một chƣơng trình nhiều thể có nhiều biến khác nhau, các biến có thể khởi tạo giá trị ban đầu nhƣ sau:
variable
: typeData namevarialbe (',' namevarialbe)* ('=' expression)? ';'
;
Ở đây có các subrule của variable bao gồm:
typeData định nghĩa kiểu dữ liệu cho biến
(',' namevarialbe)* định nghĩa việc có thể thêm hoặc không tên các biến khác biến ban đầu và các biến phân cách bởi dấu phẩy.
('=' expression)? định nghĩa việc có thể thêm phép gán với một biểu thức để khởi
tạo giá trị ban đầu của biến.
';' định nghĩa kết thúc khai báo biến.
Tƣơng tự vậy các subrule bên trong variable có thể đƣợc định nghĩa dựa trên bảng tổng quát hóa trên.