Bạn sẽ cần những điều sau đây:
- Một lý do để tạo ra một ngôn ngữ mới
- Một triết lý
- Một định nghĩa ngữ nghĩa
- Mô tả từ vựng về mã thông báo của bạn
- Một định nghĩa phân tích cú pháp
Ngôn ngữ của bạn sẽ khác như thế nào? Nhiệm vụ của nó là gì? Nó có chức năng không? Là đối tượng định hướng? Nó có phải là một ngôn ngữ meta? Các tính năng độc đáo của nó là gì? Điều gì sẽ mang lại cho thế giới không tồn tại (hoặc tồn tại một cách xấu xí)? Bạn muốn thay đổi mọi thứ như thế nào? Nó được biên soạn hoặc giải thích? Một DSL hoặc ngôn ngữ mục đích chung? Đây là của bạn triết lý và ra lệnh rất nhiều về thiết kế ngôn ngữ của bạn.
Tiếp theo, làm việc trên đầu ra cú pháp thô và ngữ nghĩa trên giấy. Đây sẽ là của bạn định nghĩa ngữ nghĩa ... viết mã giả là một cách tuyệt vời để phát triển suy nghĩ của bạn. Đọc "Ngôn ngữ lập trình C" để biết ví dụ tuyệt vời về cách thực hiện. Chơi với nó.
Sau đó, bạn sẽ cần xác định mã thông báo và cú pháp của mình theo một cách nào đó. Các chương trình sau đó xử lý chúng thành automata có khả năng đọc theo chuỗi và xử lý cú pháp. Yacc và Bison sử dụng Biểu thức chính quy và cú pháp kiểu BNF để phân tích từ vựng và cú pháp tương ứng. Ngoài ra còn có Yacc và Bison giống như các công cụ trong các ngôn ngữ khác.
Bạn cũng sẽ cần một nền tảng trong lý thuyết / trình biên dịch ngôn ngữ để biết những gì KHÔNG nên làm. Các ví dụ bao gồm các ngữ pháp mơ hồ, các vấn đề về thao tác và tạo AST và nói chung làm thế nào để làm cho cuộc sống trở nên đơn giản cho chính bạn. Biết lý thuyết là rất quan trọng. Tôi sẽ xem xét để có được những điều sau đây để bắt đầu:
Trình biên dịch: Nguyên tắc, Kỹ thuật và Công cụ (Sách rồng)
Triển khai trình biên dịch hiện đại trong C hoặc Triển khai trình biên dịch hiện đại trong Java