Tôi đã cố gắng để phân tích Lisp đơn giản/đề án như mãBuilding Lisp/Đề án giống như với flex/bò rừng bizon
E.g. (func a (b c d))
và xây dựng một cây từ nó, tôi có thể làm phân tích trong C mà không cần sử dụng bison
(tức là chỉ sử dụng flex
để trả lại mã thông báo và xây dựng cây bằng đệ quy). Nhưng, với bison
ngữ pháp, tôi không chắc chắn nơi để thêm mã vào tạo danh sách (tức là, quy tắc liên kết với thiết bị đầu cuối tích lũy biểu tượng và nơi liên kết danh sách được xây dựng cho nút chính).
Ngữ pháp của tôi giống với ngữ pháp ở đây: Lisp grammar in yacc ngữ pháp là chính xác và có thể nhận ra mã.
Tôi đã gắn thẻ lại từ 'flex' thành' gnu-flex' bất chấp lời khuyên phản hồi tại đây: http://meta.stackexchange.com/questions/26460/tag-for-two-flexes/26708#26708 đơn giản vì nó là gây nhầm lẫn cho nhiều khách truy cập vào trang web để xem biểu tượng Adobe trên thẻ. Hy vọng rằng điều này sẽ sớm được sắp xếp. Tốt nhất của may mắn nhận được một câu trả lời cho câu hỏi của bạn. – bernie
Bạn hầu như không cần flex hay bison để phân tích các biểu thức S đơn giản. Bạn sẽ có thể mã hóa nó như một trình phân tích cú pháp gốc đệ quy đơn giản với một lexer được cuộn bằng tay cho các nguyên tử, các dấu ngoặc đơn và một trình thu thập dấu cách trắng trong một thứ gì đó giống như một trăm dòng C hoặc ít hơn. Các thông dịch viên LISP ban đầu chắc chắn đã làm điều này chỉ với một chút mã. –
Ira: Đúng là không cần một trình phân tích cú pháp, nhưng "lexer cuộn bằng tay" chỉ hoạt động cho các tập con đồ chơi thông thường mà mọi người thường kết thúc. Một số Lisps/Schemes có thẻ có thể nhận được * rất * lông. Đối với giải trí của bạn, đây là một ví dụ cho một hằng số hợp lệ trong [Racket] (http://racket-lang.org/): '# e # x + e # s + e @ -e # l-e'. –