2011-10-19 32 views
7

Tôi đã có một macro lạ mà tôi đang gỡ lỗi và tôi dường như không thể tìm ra cách để có được đầu ra của bộ tiền xử lý. Tôi đang tìm kiếm tương đương với số -save-temps của GCC. Tôi đã thử vượt qua dpp đến compile:file/2, nhưng dường như tạo ra một cây phân tích cú pháp, không phải Erlang được xử lý trước.Làm cách nào để có được đầu ra của bộ tiền xử lý của Erlang?

compile:file("t.erl", 'E'). như đã đề cập bởi Anton rất tuyệt, nhưng không trợ giúp với các macro gây ra lỗi cú pháp. Thiếu một cách để gỡ lỗi các macro phức tạp, tôi đang nghiêng về việc thực hiện lập trình meta bằng cách viết các chương trình tạo mã.

+1

Bạn không thể sử dụng giao diện trình biên dịch trực tiếp bởi vì, như bạn chỉ ra, nó chỉ hoạt động cho các tập tin mà không có lỗi phân tích cú pháp. Tuy nhiên, bạn có thể gọi mô-đun epp (bộ xử lý trước Erlang) trực tiếp và nhận nó để trả lại mã thông báo được trả về sau khi các macro đã được mở rộng. Có chức năng tốt đẹp được gọi là 'epp: scan_erl_form/1' (không có giấy tờ nhưng chắc chắn * an toàn *) hoạt động theo cách tương tự như 'epp: parse_erl_form/1' nhưng không phân tích cú pháp. Tất nhiên tạo mã chắc chắn là thú vị, nếu bạn là một lập trình viên lisp thử sử dụng LFE (Lisp Flavored Erlang) mà làm cho nó dễ dàng hơn. – rvirding

Trả lời

6

Hãy thử một trong những:

compile:file("t.erl", 'P'). 
    compile:file("t.erl", 'E'). 
+2

Trả về 'lỗi' và không tạo ra bất kỳ đầu ra nào (với macro bị lỗi của tôi;' E' thực hiện những điều tuyệt vời nếu tôi không có bất kỳ lỗi nào). – nmichaels

+0

@nmichaels phải làm gì để xem đầu ra bộ xử lý nếu mọi thứ không biên dịch mà không có lỗi? – tMJ

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