Tôi đang viết một thông dịch viên C# từ đầu cho trải nghiệm học tập, và cho đến nay mọi thứ đã diễn ra suôn sẻ. Tôi có đầy đủ chức năng C# lexer mà kết quả đầu ra tất cả các loại thẻ để phân tích cú pháp. Tôi biết làm thế nào tôi sẽ phân tích các thẻ, nhưng tôi không chắc làm thế nào tôi nên cấu trúc AST của tôi (cây cú pháp trừu tượng).Làm cách nào để thiết kế các phần của cây cú pháp trừu tượng?
Ví dụ, nếu tôi có một đoạn mã đơn giản:
using System.Xml;
gì cây sẽ trông như thế khi phân tích cú pháp?
Như thế này?
UsingDirective
Identifier(System)
Identifier(Xml)
hoặc như thế này?
UsingDirective
Identifier(System)
Identifier(Xml)
Nếu tôi có thể nhận được một số đề xuất và/hoặc ví dụ như làm thế nào tôi có thể cấu trúc thứ như định danh với dấu chấm trong họ, nếu/else if/else, khai báo biến/chuyển nhượng kết hợp trong một tuyên bố (int i = 0;), định nghĩa chức năng, v.v. sẽ hữu ích. Tôi chỉ cần có một ý tưởng tốt hơn về cách cấu trúc cây và tôi có thể tự mình tìm ra phần còn lại. Cảm ơn.
Đó sẽ là một trải nghiệm học tập lâu dài, nếu bạn muốn thực hiện tất cả C# :-) – svick
Tôi sẽ loại bỏ phần lớn thư viện lớp học. Về cơ bản, tôi chỉ triển khai thực hiện những gì cần được triển khai cho các định nghĩa lớp/chức năng cơ bản, tạo/sử dụng biến và các cuộc gọi hàm. –