2011-04-21 23 views

Trả lời

10

Trong ngắn hạn, macro đọc cung cấp cho bạn khả năng xác định lại cú pháp của ngôn ngữ lập trình trong một số ngữ cảnh được phân cách.

Ví dụ: bạn có thể triển khai các cụm từ biểu thức chính quy (ví dụ: #"pattern") mình đã cung cấp macro đọc. Nếu không có chúng, bạn sẽ bị buộc phải thoát khỏi các biểu thức chính quy trong các chuỗi ký tự được chuyển đến re-pattern.

BTW, trong khi không có API Clojure nào cho việc thay đổi người đọc, nó không phải là không thể, như minh họa trong các bài:

8

Ví dụ đơn giản. Lisp phổ biến có cú pháp trình đọc khác nhau cho vectơ #() thay vì []. Nhưng với khả năng tạo macro trình đọc tùy chỉnh, bạn có thể có macro trình đọc để traslates [2 3 4 5] đến một vectơ trong Common Lisp. Vì hầu hết người dùng sẽ không nhận thức được ý nghĩa của các macro đầu đọc đã tạo nên chúng hiếm khi được sử dụng và để tránh nhầm lẫn, Rich Hickey quyết định loại bỏ khả năng có macro đọc được người dùng định nghĩa trong Clojure. Tuy nhiên, Clojure đã xác định trước macro đọc - trích dẫn, vectơ, regex, bản đồ, v.v.

6

Trong Common Lisp các độc giả là người dùng có thể mở rộng với macro đọc. Trình đọc chịu trách nhiệm đọc biểu thức s. S-biểu là một cú pháp văn bản bên ngoài với nhiều loại dữ liệu Lisp của như số, chuỗi, biểu tượng, danh sách, conses, vật kiến ​​trúc, mảng, nhân vật, ...

Các đọc không chịu trách nhiệm về cú pháp của ngôn ngữ lập trình Lisp - chỉ dành cho biểu thức s.

Vì vậy, mục đích chính, từ điểm của người dùng, cho macro đọc là mở rộng hoặc thay đổi cú pháp của biểu thức s. Ví dụ: người dùng có thể thêm cú pháp văn bản cho các lớp CLOS khác nhau (như URL, ...), bảng băm, số nhận dạng đặc biệt, loại số mới, ...

Đôi khi nó cũng được sử dụng để nhúng cú pháp của các ngôn ngữ khác/cú pháp, có các quy tắc khác nhau để tạo mã thông báo: nhúng SQL, nhúng C, biểu thức infix, các cuộc gọi nhúng vào Objective C, các ngôn ngữ quy tắc nhúng, XML nhúng, JSON nhúng và hơn thế nữa.

Một cách sử dụng khác là cho phép người dùng có quyền kiểm soát bổ sung đối với các biểu thức s, đầu đọc thực sự đọc thực sự đọc. Ví dụ: biểu thức tính năng có điều kiện.

Vì vậy, macro trình đọc người dùng có thể lập trình cho phép người dùng tùy chỉnh trình đọc liên quan đến chức năng được mô tả ở trên. Người ta có thể tưởng tượng rằng điều này rất hữu ích cho những người dùng đó, những người muốn tùy chỉnh ngôn ngữ ở cấp dữ liệu-cú pháp/mã thông báo, nhưng nó thêm một lớp phức tạp khác.

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