Gần đây tôi đã thực hiện nhiệm vụ viết một ngôn ngữ lập trình dựa trên ngăn xếp. Trước khi tôi bắt đầu thiết kế ngôn ngữ của mình, tôi nghĩ rằng nên đọc và thử nghiệm với các ngôn ngữ dựa trên ngăn xếp hiện có.
Điều này đưa tôi đến chủ đề của bài viết này. Tôi đã đọc qua bài viết trên Wikipedia về Forth , một ngôn ngữ dựa trên ngăn xếp sử dụng các biểu thức kiểu hậu tố. Trong bài viết, tôi đã thấy tuyên bố sau:
Tính linh hoạt của Forth làm cho ngữ pháp BNF tĩnh không phù hợp và nó không có trình biên dịch nguyên khối. Mở rộng trình biên dịch chỉ yêu cầu viết một từ mới, thay vì sửa đổi ngữ pháp và thay đổi cách thực hiện cơ bản.
Theo hiểu biết của tôi, trong biệt ngữ Forth, thuật ngữ "từ" dường như về cơ bản đồng nghĩa với "chương trình con". Với điều này, tuyên bố trên có vẻ lạ. Tại sao chính xác khả năng tạo các chức năng mới trong Forth sẽ tạo ra một ngữ pháp chính thức cho Forth không phù hợp? Tại sao bạn cần phải viết lại ngữ pháp cho mỗi chương trình con mới mà bạn xác định? Làm thế nào để viết một từ mới trong môi trường tạo thành mở rộng trình biên dịch? Tuyên bố trên có vẻ giống như nói rằng một ngữ pháp chính thức không phù hợp với Python vì bạn có thể xác định các hàm mới.
Trên thực tế, tôi đã quyết định thử viết một ngữ pháp kiểu BNF cho một tập hợp con đơn giản của Forth bên dưới:
program ::= stmt+
stmt ::= func | expr
func ::= ':' expr+ ';'
expr ::= INTEGER | word
word ::= ('+' | '-' | '*' | '/' )
Ngữ pháp trên dường như bao trùm một tập hợp con các câu lệnh Forth hợp lệ và dường như không khó để mở rộng để bao quát tất cả các câu lệnh hợp lệ trong ngôn ngữ Forth. Hơn nữa, nếu trình phân tích cú pháp của trình biên dịch thực hiện ngữ pháp trên, tôi không thấy trình biên dịch sẽ được mở rộng như thế nào. Trình biên dịch sẽ chỉ cần thêm bất kỳ từ mới nào vào môi trường của nó . Chỉ có môi trường được thay đổi. Có vẻ như đoạn trích trên từ Wikipedia đang kết hợp mã gạch chân cấu thành trình biên dịch (không thay đổi) với môi trường của trình biên dịch (không thay đổi).
Tóm lại, tại sao ablitiy của Forth định nghĩa các từ mới (chương trình con) làm cho không phù hợp với ngữ pháp viết?