Có rất nhiều ngôn ngữ lập trình có những đặc điểm riêng biệt. Nhưng để một chương trình được viết bằng bất kỳ chương trình nào trong số đó hoạt động, bạn cần phải phát sóng chương trình đó. Đôi khi các ngôn ngữ lập trình được phát triển cho nhu cầu riêng của chúng (ví dụ, hỗ trợ tự động hóa trong các ứng dụng lớn) và khi đó cần phải viết một trình dịch.
Cần thiết
- - ngữ pháp tự nhiên hoặc BNF của ngôn ngữ nguồn;
- - công cụ phát triển.
Hướng dẫn
Bước 1
Chuẩn bị dữ liệu để phân tích từ vựng của văn bản bằng ngôn ngữ nguồn. Liệt kê tất cả các mã thông báo bằng ngôn ngữ. Chia nhỏ chúng thành các danh mục (từ khóa, ký tự số và chuỗi, số nhận dạng, khoảng trắng, dấu câu, v.v.).
Bước 2
Triển khai một mô-đun hoặc lexer. Ở đầu vào, nó sẽ nhận được một luồng dữ liệu "thô" và ở đầu ra tạo thành danh sách các phần tử chứa mã thông báo và số nhận dạng kiểu của chúng theo trình tự mà chúng xuất hiện trong văn bản nguồn. Chương trình phân tích cú pháp có thể khá đơn giản " máy quét một cấp ". Thực hiện khôi phục lỗi không có ý nghĩa. Các ký tự không hợp lệ sẽ được coi là lỗi.
Bước 3
Chuẩn bị dữ liệu để phân tích cú pháp. Dựa trên ngữ pháp tự nhiên hoặc BNF của ngôn ngữ nguồn, hãy soạn ngữ pháp LL1 của nó. Dựa trên loại ngữ pháp này, hãy vẽ sơ đồ phân tích cú pháp về các loại mã thông báo hợp lệ và cấu trúc ngữ nghĩa của ngôn ngữ.
Bước 4
Triển khai một mô-đun hoặc trình phân tích cú pháp. Ở đầu vào, nó sẽ nhận được một danh sách các mã thông báo được chuẩn bị ở giai đoạn phân tích từ vựng. Phát triển các thuật toán kiểm tra cú pháp đệ quy bằng cách sử dụng lược đồ bạn đã tạo ở bước ba. Nếu cần, hãy triển khai các cơ chế khôi phục lỗi Bổ sung chức năng cho các thuật toán phân tích cú pháp để xây dựng cây tính toán các hàm, các phương thức của lớp. Với cấu trúc chính xác của thuật toán phân tích cú pháp, chức năng này có thể được triển khai mà không gặp bất kỳ sự cố nào. Điều này tránh sự cần thiết phải triển khai nó như một mô-đun riêng biệt. Các cấu trúc dữ liệu được tạo phải chứa danh sách các lệnh ở dạng chuỗi "phẳng" (các biểu thức số học được mở rộng thành dạng hậu tố phù hợp để tính toán trên máy ngăn xếp, các vòng lặp được chuyển đổi thành tổ hợp các chuỗi lệnh tính toán và các bước nhảy có điều kiện hoặc không điều kiện, v.v.).
Bước 5
Tạo một mô-đun tối ưu hóa nếu cần. Nó sẽ xử lý và chuyển đổi các cấu trúc dữ liệu đã chuẩn bị ở bước trước. Các thuật toán và phương pháp tối ưu hóa rất đa dạng.
Bước 6
Phát triển trình tạo mã. Khi xử lý các cấu trúc được chuẩn bị ở bước thứ tư hoặc thứ năm, nó chỉ nên chuyển đổi chuỗi các lệnh trừu tượng thành các lệnh để thực thi trên một nền tảng cụ thể.
Bước 7
Tạo một chương trình chất kết dính (trình liên kết) nếu cần. Nó sẽ tạo thành mô-đun thực thi kết quả bằng cách chọn vị trí của các đoạn mã, tính toán địa chỉ của các nhãn, v.v.