Tôi có thể học những kiến ​​thức cơ bản về cách viết lexer ở đâu?


85

Tôi muốn học cách viết lexer. Khóa học đại học của tôi có một bài tập mà chúng tôi phải viết một parser (và một lexer để đi cùng với nó) nhưng điều này được giao cho chúng tôi mà không có hướng dẫn hoặc phản hồi (vượt quá điểm) nên tôi không thực sự học được nhiều từ nó.

Sau khi tìm kiếm chủ đề này, tôi chỉ có thể tìm thấy các bài viết khá nâng cao, tập trung vào các lĩnh vực mà tôi cảm thấy đi trước một vài bước so với vị trí của tôi. Tôi muốn một cuộc thảo luận về những điều cơ bản của việc viết lexer cho một ngôn ngữ rất đơn giản mà tôi có thể sử dụng làm cơ sở để nghiên cứu mã hóa các ngôn ngữ phức tạp hơn.

Ở giai đoạn này, tôi không thực sự quan tâm đến các phương pháp hay nhất hoặc các kỹ thuật tối ưu hóa mà thay vào đó tôi thích tập trung vào những yếu tố cần thiết. Một số tài nguyên tốt để giúp tôi bắt đầu là gì?

Câu trả lời:


72

Về cơ bản, có hai cách tiếp cận chính để viết lexer:

  1. Tạo một tài liệu viết tay trong trường hợp đó tôi đề xuất hướng dẫn nhỏ này .
  2. Sử dụng một số công cụ tạo lexer như lex . Trong trường hợp này, tôi khuyên bạn nên đọc các hướng dẫn về công cụ cụ thể được lựa chọn.

Ngoài ra, tôi muốn giới thiệu hướng dẫn về Kính vạn hoa từ tài liệu LLVM . Nó chạy qua việc triển khai một ngôn ngữ đơn giản và đặc biệt thể hiện cách viết một từ vựng nhỏ. Có một C ++ và một phiên bản Objective Caml của hướng dẫn.

Sách giáo khoa cổ điển về chủ đề này là Bộ biên dịch: Nguyên tắc, Kỹ thuật và Công cụ còn được gọi là Sách Rồng. Tuy nhiên điều này có lẽ thuộc loại "viết lên khá tiên tiến".


4
Hướng dẫn về Kính vạn hoa là phần thực sự trả lời câu hỏi này cho tôi.
Robert Byers

Để biết thêm thông tin về cách viết trình phân tích cú pháp LL (1) bằng tay, hãy xem câu trả lời này .
jchook

12

Các Rồng Sách có lẽ là hướng dẫn dứt khoát về đề tài này, mặc dù nó có thể là một chút áp đảo. Các mẫu triển khai ngôn ngữngữ dụng ngôn ngữ lập trình cũng là những nguồn tài liệu tuyệt vời.


5
+1 trên sách Rồng. Đã học được RẤT NHIỀU từ nó khi ở trường đại học. Vâng, có rất nhiều thứ ở đó, nhưng nếu bạn thực sự quan tâm đến thiết kế và triển khai trình biên dịch, đó là một nguồn tài nguyên tuyệt vời.
DarinH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.