Tôi muốn nói rằng trước khi bạn bắt đầu, bạn có thể muốn xem qua số Dragon Book và/hoặc Programming Language Pragmatics. Điều đó sẽ giúp bạn trong lý thuyết ngôn ngữ lập trình. Các cuốn sách bao gồm biên soạn, và giải thích, và sẽ cho phép bạn xây dựng tất cả các công cụ cần thiết để tạo ra một ngôn ngữ lập trình cơ bản.
Tôi không biết bao nhiêu ngôn ngữ lắp ráp bạn biết, nhưng trừ khi bạn khá thoải mái với một số phương ngữ lập trình ngôn ngữ lắp ráp tôi khuyên bạn nên cố gắng viết một trình biên dịch biên dịch xuống mã lắp ráp khá một chút thách thức. Bạn đã đề cập trước đó rằng bạn quen thuộc với cả C và C++, vì vậy có lẽ bạn có thể viết một trình biên dịch để biên dịch xuống C hoặc C++ và sau đó sử dụng gcc/g ++ hoặc bất kỳ trình biên dịch C/C++ nào khác để chuyển đổi mã thành một tệp thực thi nguyên gốc. Đây là ngôn ngữ lập trình Vala (nó chuyển đổi cú pháp Vala thành mã C sử dụng thư viện GObject).
Đối với những gì bạn có thể sử dụng để viết trình biên dịch, bạn có nhiều tùy chọn. Bạn có thể viết nó bằng tay trong C hoặc C++, hoặc để đơn giản hóa phát triển, bạn có thể sử dụng ngôn ngữ cấp cao hơn để bạn có thể tập trung vào việc viết trình biên dịch nhiều hơn phân bổ bộ nhớ và những thứ cần thiết để làm việc với chuỗi in C.
Bạn chỉ cần tạo các ngữ pháp và có Flex và Bison tạo trình phân tích cú pháp và từ vựng. Điều này thực sự hữu ích vì nó cho phép bạn làm phát triển lặp lại để nhanh chóng làm việc để có được một trình biên dịch làm việc.
Một tùy chọn khác mà bạn có là sử dụng ANTLR để tạo trình phân tích cú pháp của bạn, lợi thế của việc này là bạn nhận được rất nhiều ngôn ngữ đích mà ANTLR có thể biên dịch. Tôi đã không bao giờ được sử dụng này nhưng tôi đã nghe rất nhiều về nó. Ngoài ra, nếu bạn muốn có nền tảng tốt hơn trên các mô hình được sử dụng thường xuyên trong việc xây dựng trình biên dịch/quét/phân tích ngôn ngữ lập trình, bạn sẽ nhận được một cuốn sách về Mô hình tính toán. Tôi muốn giới thiệu Introduction to the Theory of Computation.
Bạn cũng có vẻ quan tâm đến việc đạt được sự hiểu biết về các hệ điều hành. Điều này tôi sẽ nói là một cái gì đó là riêng biệt từ thiết kế ngôn ngữ lập trình, và cần được theo đuổi riêng biệt. Cuốn sách Principles of Modern Operating Systems là một nơi khởi đầu khá tốt để học về điều đó. Bạn có thể bắt đầu với các dự án nhỏ như tạo vỏ hoặc viết chương trình mô phỏng lệnh ls và sau đó chuyển sang nhiều thứ cấp thấp hơn, tùy thuộc vào cách bạn thực hiện cuộc gọi hệ thống trong C.
Tôi hy vọng rằng giúp bạn.
EDIT: Tôi đã học được rất nhiều kể từ khi tôi viết câu trả lời này. Tôi đã lấy số online course on programming languages mà Đại học Brown đã cung cấp khi tôi nhìn thấy câu trả lời này nổi bật ở đó. Các giáo sư rất đúng chỉ ra rằng câu trả lời này nói rất nhiều về phân tích cú pháp nhưng là ánh sáng trên chỉ là về tất cả mọi thứ khác. Tôi thực sự khuyên bạn nên xem các video và bài tập của khóa học nếu bạn muốn có ý tưởng tốt hơn về cách tạo ngôn ngữ lập trình.
Nguồn
2010-09-28 06:59:27
Tôi không chắc bạn sẽ học rất nhiều về hệ điều hành bằng cách viết một trình biên dịch ... –
Cảm ơn tôi đã không nhìn thấy câu hỏi khác, nó đã không bật lên trong Google hoặc trên SO khi tôi tìm kiếm. Rất nhiều câu trả lời hay! –
Tôi đã xây dựng một ngôn ngữ lập trình mà không cần lắp ráp hoặc nhị phân. http://github.com/struixLang – sbrm1