ASDL được sử dụng khi bạn cần tạo một cây trong mô-đun và nhập cùng một cây trong mô-đun khác (hoặc gần như cùng một cây, bằng cách nào đó được tối ưu hóa).
Đối với điều này, bạn cần phải có chức năng xây dựng (lý tưởng với bộ kiểm tra kiểu), chức năng in cây như hình dung nó, bạn chắc chắn bạn đã tạo ra nó một cách chính xác.
ASDL lấy làm đầu vào một số cây viết bằng cú pháp gần giống với cú pháp kiểu dữ liệu đại số (như trong haskell hoặc ml), hoặc cú pháp trong BNF nhưng đơn giản hơn nhiều và tự động tạo tất cả các contructors chức năng bắt đầu với mô tả đơn giản của cây.
Ví dụ: nếu bạn có từ khóa, nó sẽ phải tạo ra các từ vựng có loại. Bạn cũng cần xem dòng đầu ra của từ vựng (đây là dạng tuyến tính, vì vậy một cây rất đơn giản). Thay vì viết các chức năng để in, xây dựng các từ, bạn xác định chúng như sau:
lexeme=
ID(STRING)
| INT(num_integer)
| FLOAT(num_float)
attributes(int coord_x, int coord_y)
num_integer:
....
num_float:
....
và bạn gọi hàm tạo ID, INT, FLOAT, vv từ lexer của bạn. ASDL sẽ chuyển đổi cú pháp đơn giản này trong tất cả các chức năng bạn cần, hoặc là xây dựng các nút cho AST, hoặc để in, hoặc bất cứ thứ gì bạn cần. ASDL không áp đặt các hạn chế đối với mã được tạo ra.
Nếu bạn thêm attributes
vào một loại, chẳng hạn như tọa độ của mã thông báo, các thuộc tính đó sẽ được nối thêm vào các thông số của mỗi contructor từ loại đó.
Một cây phức tạp hơn, tạo ra bởi một phân tích cú pháp sẽ trông như thế
expr: SUM(expr, expr)
|PRODUCT(expr, expr)
|number
number: num_integer
Trong trường hợp này asdl sẽ kiểm tra xem các cuộc gọi của SUM (_ _) thực hiện bởi các phân tích cú pháp sẽ vượt qua để tổng hợp các nút tạo ra với một trong những nhà thầu của expr. num_integer
được định nghĩa bên ngoài, có thể bởi một cây asdl cho lexer.
Lưu ý rằng bạn không được phép xác định các hàm tạo có chứa cụm từ thông dụng, chẳng hạn như number: [0-9]+
. ASDL đơn giản hơn EBNF.
Các nhà xây dựng này sẽ được xác định sao cho xây dựng những gì bạn cần và hơn thế nữa, họ gõ kiểm tra, để đảm bảo rằng trình tạo mã/trình phân tích cú pháp/mã của bạn xuất ra các cây phù hợp với ngôn ngữ được định nghĩa bởi asdl.
Để hiểu rõ ASDL, bạn cần viết 3-4 trình phân tích cú pháp và xem điều gì phổ biến trong mã mà chúng tạo ra. Đó là một phần phổ biến trong thực tế ASDL, vì vậy đây là một trừu tượng cho đầu ra của các trình phân tích cú pháp nói riêng.