2009-09-19 29 views

Trả lời

6

Bạn sẽ phải viết nó cho mình. Xem mã F# quotations visualizer làm hướng dẫn để chuyển đổi cây cú pháp trừu tượng trích dẫn.

0

Không có gì, và nó không phải là khá dễ dàng, ngoại trừ trong trường hợp rất đơn giản. Một trong những vấn đề chính, ví dụ, là cấu trúc phù hợp. Đó là cú pháp đường cho toàn bộ các câu lệnh if và switch (thử in báo giá bằng một kết quả phù hợp, bạn sẽ thấy). Một trong những biggies là biểu thức tính toán, nhưng tôi đoán bạn có thể bỏ qua những lúc đầu tiên.

Sau đó, có một lỗ hổng không rõ ràng bạn sẽ phải giải quyết, với các quy ước như nhà điều hành đường ống bắt đầu một dòng mới, hãy bắt đầu một dòng mới, thụt đầu dòng, infix, tiền tố, trường hợp đặc biệt như (::) nhà điều hành và vv.

Tất cả trong tất cả, có thể thực hiện được nhưng không tầm thường. Sắp xếp giống như dịch ngược.

5

Tôi đã triển khai trình biên dịch ngược báo giá như là một phần của dự án mã nguồn mở lớn hơn Unquote. Nó có thể dịch ngược nhiều biểu thức F # được trích dẫn đơn giản thành các chuỗi cú pháp không phải là dòng đơn (xem trang chủ của dự án để biết danh sách các tính năng giải mã). Ví dụ:

> decompile <@ (11 + 3)/2 = String.length ("hello world".Substring(4, 5)) @>;; 
val it : string = 
    "(11 + 3)/2 = String.length ("hello world".Substring(4, 5))" 

@Kurt Schelfthout là chính xác về nhiều thách thức phải đối mặt khi giải mã F # Trích dẫn thành biểu mẫu có thể đọc được của con người. Nhưng từ công việc của tôi cho đến nay, tôi tin rằng nó có thể viết một bộ giải mã báo giá có thể tạo ra chính xác mã F #. Hãy biểu thức phù hợp và biểu thức tính toán ví dụ, unquote decompiler thể sản xuất đúng F # mã trong các trường hợp đơn giản sau đây:

> decompile <@ match true with | true -> "hi" | _ -> "bye" @>;; 
val it : string = 
    "let matchValue = true in if matchValue then "hi" else "bye"" 

> decompile <@ seq {yield 1; yield 2} @>;; 
val it : string = 
    "seq (Seq.delay (fun unitVar -> Seq.append (Seq.singleton 1) (Seq.delay (fun unitVar -> Seq.singleton 2))))" 

Infix và tiền tố nhà khai thác không phải là quá khó (như bạn có thể thấy trong ví dụ đầu tiên) , nhưng cấu trúc nguồn như dòng mới và thụt đầu dòng là một chủ đề thú vị (mặc dù không quá khó khăn, tôi nghĩ). Tuy nhiên, cú pháp không phải dòng đơn là đủ cho các yêu cầu của Unquote.

Các vấn đề liên quan