Một cây cú pháp cụ thể phù hợp với những gì các quy tắc ngữ pháp nói là cú pháp. Mục đích của cây cú pháp trừu tượng là có một biểu diễn "đơn giản" về những gì cần thiết trong "cây cú pháp".
Giá trị thực trong AST IMHO là nó nhỏ hơn CST, và do đó mất ít thời gian hơn để xử lý. (Bạn có thể nói, ai quan tâm chứ? Nhưng tôi làm việc với một công cụ mà chúng ta có hàng chục triệu nút sống cùng một lúc!).
Hầu hết các trình tạo phân tích cú pháp có bất kỳ hỗ trợ nào cho việc xây dựng cây cú pháp đều nhấn mạnh rằng bạn chỉ định chính xác cách chúng được xây dựng theo giả định rằng các nút cây của bạn sẽ "đơn giản" hơn CST (và trong đó, chúng thường đúng, vì các lập trình viên khá lười biếng). Có thể cho rằng điều đó có nghĩa là bạn phải viết mã các hàm ít người truy cập cây hơn, và điều đó cũng có giá trị, ở chỗ nó giảm thiểu năng lượng kỹ thuật. Khi bạn có 3500 quy tắc (ví dụ: đối với COBOL), điều này quan trọng. Và sự "đơn giản" này dẫn đến tính chất tốt của "sự nhỏ bé".
Nhưng có những AST như vậy tạo ra một vấn đề không có ở đó: nó không khớp với ngữ pháp, và bây giờ bạn phải theo dõi cả hai. Và khi có 1500 nút AST cho ngữ pháp quy tắc 3500, điều này rất quan trọng. Và nếu ngữ pháp phát triển (chúng luôn luôn như vậy!), Bây giờ bạn có hai tập hợp khổng lồ để đồng bộ hóa.
Một giải pháp khác là để trình phân tích cú pháp đơn giản tạo các nút CST cho bạn và chỉ sử dụng các nút đó. Đây là một lợi thế lớn khi xây dựng ngữ pháp: không cần phải phát minh ra 1500 nút AST đặc biệt để mô hình hóa 3500 quy tắc ngữ pháp. Chỉ cần nghĩ về cái cây là đồng nghĩa với ngữ pháp. Theo quan điểm của kỹ sư ngữ pháp, điều này là hoàn toàn không có trí tuệ, điều này cho phép anh ta tập trung vào việc hiểu đúng ngữ pháp và đánh giá nó vào nội dung của trái tim anh ta. Có thể cho rằng bạn phải viết nhiều quy tắc truy cập nút hơn, nhưng điều đó có thể được quản lý. Thêm về điều này sau.
Những gì chúng tôi làm với Bộ công cụ cải tiến phần mềm DMS là tự động xây dựng một CST dựa trên kết quả của quá trình phân tích cú pháp (GLR). Sau đó, DMS tự động tạo CST "nén" vì lý do hiệu quả về dung lượng, bằng cách loại bỏ các đầu cuối mang giá trị (từ khóa, dấu chấm câu), các sản phẩm đơn nguyên vô dụng về mặt ngữ nghĩa và tạo danh sách cho các cặp quy tắc ngữ pháp được liệt kê như:
L = e ;
L = L e ;
L2 = e2 ;
L2 = L2 ',' e2 ;
và một loạt các biến thể của các hình thức như vậy. Bạn nghĩ về các quy tắc ngữ pháp và CST ảo; công cụ này hoạt động trên biểu diễn nén. Dễ dàng trên bộ não của bạn, nhanh hơn / nhỏ hơn trong thời gian chạy.
Đáng chú ý, CST nén được xây dựng theo cách này trông rất giống AST mà bạn có thể đã thiết kế bằng tay (xem liên kết ở cuối các ví dụ). Đặc biệt, CST nén không mang bất kỳ nút nào chỉ là cú pháp cụ thể. Có một số điểm khó xử: ví dụ: trong khi các nút cụ thể cho '(' và ')' được tìm thấy theo kiểu cổ điển trong các chương trình con biểu thức không có trong cây, thì một "nút trong dấu ngoặc đơn" lại xuất hiện trong CST được nén và phải được xử lý. Một AST thực sự sẽ không có điều này. Đây có vẻ như là một cái giá khá nhỏ phải trả để thuận tiện cho việc không phải chỉ định việc xây dựng AST, bao giờ hết. Và tài liệu cho cây luôn có sẵn và chính xác: ngữ pháp là tài liệu.
Làm thế nào để chúng ta tránh "khách thêm"? Chúng tôi không hoàn toàn, nhưng DMS cung cấp một thư viện AST để hướng dẫn AST và xử lý sự khác biệt giữa CST và AST một cách minh bạch. DMS cũng cung cấp bộ đánh giá "ngữ pháp thuộc tính" (AGE), là một phương pháp để chuyển các giá trị được tính toán cho các nút lên và xuống cây; AGE xử lý tất cả các vấn đề về biểu diễn cây và vì vậy kỹ sư công cụ chỉ lo lắng về việc viết các phép tính một cách hiệu quả trực tiếp trên chính các quy tắc ngữ pháp. Cuối cùng, DMS cũng cung cấp các mẫu "cú pháp bề mặt", cho phép các đoạn mã từ ngữ pháp được sử dụng để tìm các loại cây con cụ thể mà không cần biết hầu hết các loại nút liên quan.
Một trong những câu trả lời khác cho rằng nếu bạn muốn xây dựng các công cụ có thể tái tạo nguồn, AST của bạn sẽ phải phù hợp với CST. Điều đó không thực sự đúng, nhưng việc tạo lại nguồn sẽ dễ dàng hơn nhiều nếu bạn có các nút CST. DMS tự động tạo ra hầu hết các ứng dụng xinh đẹp vì nó có quyền truy cập vào cả hai: -}
Điểm mấu chốt: ASTs rất tốt cho các loại thực phẩm nhỏ, cả thực vật và khái niệm. Xây dựng AST tự động từ CST cung cấp cả hai và cho phép bạn tránh vấn đề theo dõi hai tập hợp khác nhau.
CHỈNH SỬA Tháng 3 năm 2015: Liên kết đến các ví dụ về CST so với "AST" được xây dựng theo cách này