Hiện tại, bạn có thể dịch mã C# thành Cây cú pháp trừu tượng không?
Vâng, trivially trong những hoàn cảnh đặc biệt (= bằng cách sử dụng mới Expressions framework):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Điều này tạo ra một cây biểu thức lambda, tức là một chức năng thực thi một int
và trả lại gấp đôi. Bạn có thể sửa đổi các cây biểu hiện bằng cách sử dụng khuôn khổ Expressions (= các lớp từ trong không gian tên đó) và sau đó biên dịch nó ở thời gian chạy:
var newBody = Expression.Add(f.Body, Expression.Constant(1));
f = Expression.Lambda<Func<int, int>>(newBody, f.Parameters);
var compiled = f.Compile();
Console.WriteLine(compiled(5)); // Result: 11
Chú ý rằng tất cả các biểu thức là không thay đổi nên họ phải được xây dựng một lần nữa bởi thành phần. Trong trường hợp này, tôi đã thêm vào trước một bổ sung 1.
Lưu ý rằng các cây biểu thức này chỉ hoạt động trên các biểu thức thực tế tức là nội dung được tìm thấy trong hàm C#. Bạn không thể nhận được các cây cú pháp cho các cấu trúc cao hơn như các lớp theo cách này. Sử dụng khung công tác CodeDom cho chúng.
Nguồn
2008-10-17 19:20:53
Tự hỏi làm cách nào để tìm cách dịch mã C# sang AST? – yeeen
Tôi tạm dừng dự án. –
Giữ lâu dài ... Lol –