Tôi đang cố gắng làm việc theo cách của mình thông qua Compilers: Backend to Frontend (and Back to Front Again) bởi Abdulaziz Ghuloum. Nó dường như viết tắt từ những gì người ta mong đợi trong một khóa học/hội thảo đầy đủ, vì vậy tôi đang cố gắng điền vào các phần bản thân mình.Ghuloum sử dụng Đề án nào?
Ví dụ, tôi đã cố gắng sử dụng khuôn khổ thử nghiệm của mình trong hương vị R5RS của DrScheme, nhưng nó dường như không thích những thứ vĩ mô:
src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket
Tôi đã đọc giấy giới thiệu của mình trên Tất nhiên, An Incremental Approach to Compiler Construction, cung cấp cái nhìn tổng quan về các kỹ thuật được sử dụng và đề cập đến một vài Đề án với các tính năng mà bạn có thể muốn thực hiện cho 'tín dụng bổ sung', nhưng anh ta không đề cập đến Đề án mà anh ta sử dụng trong khóa học.
Cập nhật
Tôi vẫn đang đào sâu vào câu hỏi ban đầu (tùy chọn như Petit Đề án được đề xuất bởi Eli dưới điều tra), nhưng không tìm thấy một liên kết thú vị liên quan đến công việc Gholoum, vì vậy tôi bao gồm nó ở đây.
[Đề án Ikarus] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)) là việc triển khai thực tế các ý tưởng của Ghuloum, và dường như là một phần trong tiến trình làm việc của ông. Đó là một trong những triển khai đầu tiên của R6RS. Ikarus bây giờ, nhưng kịch bản cấu hình không muốn nhận ra hệ thống của tôi cài đặt của libgmp.so, vì vậy vấn đề của tôi vẫn chưa được giải quyết.
Ví dụ
Ví dụ sau đây dường như làm việc trong PLT 2.4 .2 chạy trong DrEd sử dụng Pretty Big
(require lang/plt-pretty-big)
(load "/Users/donaldwakefield/ghuloum/tests/tests-driver.scm")
(load "/Users/donaldwakefield/ghuloum/tests/tests-1.1-req.scm")
(define (emit-program x)
(unless (integer? x) (error "---"))
(emit " .text")
(emit " .globl scheme_entry")
(emit " .type scheme_entry, @function")
(emit "scheme_entry:")
(emit " movl $~s, %eax" x)
(emit " ret")
)
Cố gắng thay thế các đòi hỏi chỉ với #lang các chương trình kết quả trong thông báo lỗi
foo.scm:7:3: expand: unbound identifier in module in: emit
mà dường như là do một sự thất bại để tải kiểm tra-driver.scm. Cố gắng sử dụng #lang r6rs vô hiệu hóa REPL, mà tôi thực sự muốn sử dụng, vì vậy tôi sẽ cố gắng tiếp tục với Pretty Big.
Cảm ơn Eli Barzilay đã giúp đỡ bệnh nhân.
Ngoài ra, phiên bản mới của Chez Scheme có thể làm hỏng mọi thứ, vì vậy ngay cả khi bạn sử dụng Chez Scheme, những thứ cũ liên quan đến macro và mô-đun có thể không hoạt động. – erjiang