tôi có thể cung cấp cho bạn một cái nhìn tổng quan về thông dịch viên của tôi làm việc như thế nào, có lẽ nó có thể cung cấp cho bạn một ý tưởng về những điều nói chung. Mặc dù câu trả lời là khá muộn, tôi hy vọng điều này có thể giúp người khác, những người đã đến chủ đề này và muốn có một ý tưởng chung.
- Đối với mỗi dòng của lược đồ được nhập, một đối tượng Lệnh được tạo. Nếu lệnh là một phần thì mức tổ của nó được lưu trữ (số dấu ngoặc vuông còn lại để hoàn thành biểu thức). Nếu lệnh hoàn thành một đối tượng biểu thức được tạo ra và các bộ đánh giá được kích hoạt trên đối tượng này.
- Có 4 loại lớp học đánh giá xác định, mỗi xuất phát từ Evaluator lớp cơ sở
a) Define_Evaluator: cho xác định báo cáo
b) Funcall_Evaluator: để xử lý hàm do người dùng định nghĩa khác
c) Read_Evaluator: để đọc biểu thức và chuyển đổi nó thành đối tượng lược đồ
d) Print_Evaluator: in đối tượng tùy thuộc vào loại đối tượng.
e) Eval_Evaluator: thực hiện quá trình xử lý thực tế của biểu thức.
3 .-> Đầu tiên mỗi biểu thức được đọc bằng Trình đánh giá đã đọc sẽ tạo đối tượng lược đồ trong biểu thức. Biểu thức lồng nhau được tính toán đệ quy cho đến khi biểu thức hoàn tất.
-> Tiếp theo, Eval_Evaluator được kích hoạt để xử lý đối tượng biểu thức lược đồ được tạo trong bước đầu tiên. điều này xảy ra như vậy
a) nếu biểu thức được đánh giá là biểu tượng. Trả về giá trị của nó. Do đó, biến số blk sẽ trả về đối tượng cho khối đó.
b) nếu biểu thức được đánh giá là danh sách. In danh sách.
c) nếu biểu thức được đánh giá là hàm. Tìm định nghĩa của hàm sẽ trả về đánh giá bằng cách sử dụng Funcall_Evaluator.
-> Cuối cùng bộ đánh giá in được kích hoạt để in kết quả, bản in này sẽ phụ thuộc vào loại biểu thức đầu ra.
Disclaimer: Đây là cách thông dịch viên của tôi làm việc, doesnt phải như vậy.
Nguồn
2012-06-18 14:28:20
Sau khi đọc SICP, có vẻ như tôi muốn viết thêm thông dịch viên của bạn trong Đề án (hoặc một số phương ngữ Lisp khác - Tôi thích Clojure) và thực hiện một số bài tập. trong C. – mwd
Bạn sẽ tham gia SICP bao xa? Bạn sẽ viết một trình thông dịch Scheme (thực sự nhiều hơn một) và một trình biên dịch trong quá trình đọc chương 4 và 5. Nếu bạn hoàn thành cuốn sách, bạn sẽ tìm thấy những gì bạn tìm kiếm: trình thông dịch metacircular (Scheme in Scheme) ngắn. – spacemanaki