Điều này nghe có vẻ giống như một dự án cá nhân tuyệt vời. Bạn sẽ tìm hiểu rất nhiều về cách các phần cơ bản của trình biên dịch hoạt động. Tôi sẽ bỏ qua cố gắng sử dụng trình tạo trình phân tích cú pháp; nếu điều này là để chỉnh sửa của riêng bạn, bạn sẽ tìm hiểu thêm bằng cách làm tất cả từ đầu.
Cách các hệ thống như vậy hoạt động chính thức là cách chúng tôi hiểu ngôn ngữ tự nhiên. Nếu tôi đưa cho bạn một câu: "Con chó, Rover, ăn đồ ăn của anh ấy", điều đầu tiên bạn làm là chia nó ra thành các từ và dấu chấm câu. "The", "SPACE", "dog", "COMMA", "SPACE", "Rover", ... Đó là "tokenizing" hoặc "lexing".
Điều tiếp theo bạn làm là phân tích luồng mã thông báo để xem câu đó có đúng ngữ pháp hay không. Ngữ pháp tiếng Anh cực kỳ phức tạp, nhưng câu này khá đơn giản. ĐỐI TƯỢNG-TÁC ĐỘNG-ĐỘNG TỪ-ĐỐI TƯỢNG. Đây là "phân tích cú pháp".
Một khi bạn biết rằng câu là ngữ pháp, sau đó bạn có thể phân tích câu để thực sự có được ý nghĩa từ nó. Ví dụ, bạn có thể thấy rằng có ba phần của câu này - chủ đề, sự nhạy cảm, và "của anh ấy" trong đối tượng - tất cả chỉ đến cùng một thực thể, cụ thể là, con chó. Bạn có thể tìm ra rằng con chó là thứ làm việc ăn uống, và thức ăn là thứ đang được ăn. Đây là giai đoạn phân tích ngữ nghĩa.
Trình biên dịch sau đó có giai đoạn thứ tư mà con người không làm, đó là chúng tạo ra mã đại diện cho các hành động được mô tả bằng ngôn ngữ.
Vì vậy, hãy làm tất cả. Bắt đầu bằng cách xác định mã thông báo của ngôn ngữ của bạn là gì, hãy xác định Mã thông báo lớp cơ sở và một nhóm các lớp dẫn xuất cho từng loại. (IdentifierToken, OrToken, AndToken, ImpliesToken, RightParenToken ...). Sau đó viết một phương thức nhận một chuỗi và trả về một IEnumerable '. Đó là lexer của bạn.
Thứ hai, tìm hiểu ngữ pháp của ngôn ngữ của bạn là gì và viết một trình phân tích cú pháp gốc đệ quy lên IEnumerable thành một cây cú pháp trừu tượng đại diện cho các thực thể ngữ pháp trong ngôn ngữ của bạn.
Sau đó viết một trình phân tích nhìn vào cây đó và tìm ra các số liệu, chẳng hạn như "tôi có bao nhiêu biến miễn phí khác nhau?"
Sau đó, viết trình tạo mã kích hoạt mã cần thiết để đánh giá các bảng chân lý. Spitting IL có vẻ như quá mức cần thiết, nhưng nếu bạn muốn thực sự là buff, bạn có thể. Nó có thể dễ dàng hơn để cho thư viện cây biểu thức làm điều đó cho bạn; bạn có thể chuyển đổi cây phân tích cú pháp của bạn thành một cây biểu thức, sau đó biến cây biểu thức thành một đại biểu và đánh giá các đại biểu.
Chúc may mắn!
Cụm từ thông dụng sẽ không hoạt động do số lượng dấu ngoặc đơn tùy ý. Bạn sẽ cần phải sử dụng một số loại trình tạo trình phân tích cú pháp. –
Tôi nghĩ, các mã nguồn này (http://mrieppel.net/prog/truthtable.html) rất hữu ích. – yv4