2010-01-29 11 views
7

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.

+0

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

Trả lời

3

Ngôn ngữ ông sử dụng rất có thể là Chez Scheme. Bất kể, ngôn ngữ R5RS trong PLT là một phiên bản khá nghiêm ngặt của R5RS, với phần mở rộng như dấu ngoặc vuông ném lỗi - và bạn có thể nhận được số dặm nhiều hơn bằng cách sử dụng ngôn ngữ mặc định #lang scheme. (Hoặc, nếu không thành công, hãy thử và xem bạn có thể làm việc với Petit - phiên bản miễn phí của Chez.)

+0

Có [] thực sự bất hợp pháp trong R5RS nghiêm ngặt không? Tôi nghĩ rằng họ đã được chỉ định là hành xử giống hệt với(). (Sau) Yup, phần 7.2 không đề cập đến [], chỉ cần().Vì vậy, tôi đoán chúng là bất hợp pháp. –

+0

Có, chúng luôn được dành riêng cho một "phần mở rộng trong tương lai", và được làm giống như "()" s trong R6RS. Trong mọi trường hợp, một số đề án có một phần mở rộng như vậy, nhưng yêu cầu phổ biến cho ngôn ngữ PLT R5RS là làm cho nó rất nghiêm ngặt. –

+0

Eli, cảm ơn lời khuyên. Tôi đang khám phá Petite Scheme, mặc dù có vấn đề thư viện với hộp Linux của tôi. Có lẽ tôi sẽ có may mắn hơn với Mac của tôi ở nhà. Có ai đã cài đặt thành công Ikarus không? Tôi cho rằng, có nguồn gốc từ ông Ghuloum, rằng nó chấp nhận []. –

1

Bạn có thể xem hướng dẫn thiết lập để chạy nó here trên Ubuntu x86.

Tải xuống bản cài đặt cho Petite Scheme là here.

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