Đây là một phần của một loạt các câu hỏi tập trung vào dự án chị em với Dự án Trừu tượng, nhằm mục đích trừu tượng hóa các khái niệm được sử dụng trong thiết kế ngôn ngữ dưới dạng khung. Dự án chị em được gọi là OILexer, nhằm mục đích xây dựng một trình phân tích cú pháp từ các tệp ngữ pháp, mà không sử dụng mã tiêm vào các kết quả khớp.
Một số trang khác liên quan đến những câu hỏi này, liên quan đến gõ cấu trúc, có thể được xem tại đây và dễ sử dụng, được tìm thấy ở đây . Chủ đề meta liên quan đến một cuộc điều tra về khung và vị trí thích hợp để đăng có thể được tìm thấy ở đây .
Tôi đang đi đến điểm mà tôi sắp bắt đầu trích xuất cây phân tích cú pháp từ một ngữ pháp nhất định, theo sau là trình phân tích cú pháp đệ quy sử dụng DFA để phân biệt các đường dẫn chuyển tiếp (tương tự như LL (*) của ANTLR 4, vì vậy tôi Hình tôi sẽ mở nó ra để hiểu rõ hơn.
Trong một trình biên dịch trình phân tích cú pháp, loại tính năng nào là lý tưởng?
Cho đến nay ở đây là một tổng quan ngắn gọn về những gì được thực hiện:
- Mẫu
- Nhìn về phía trước dự đoán, biết những gì hợp lệ tại một điểm nhất định.
- Quy tắc 'Tiêu chuẩn hóa' lấy chữ theo quy tắc và giải quyết mã thông báo họ đến từ đâu.
- Tự động không điều kiện
- Automata quyết định
- Máy trạng thái từ vựng đơn giản để nhận dạng mã thông báo
- Phương pháp tự động hóa mã thông báo:
- Quét - hữu ích cho nhận xét: Nhận xét: = "/ *" Quét ("* /");
- Phép trừ - Hữu ích cho Mã định danh: Mã định danh: = Phép trừ (Mã định danh, Từ khóa);
- Đảm bảo định danh không chấp nhận từ khóa.
- Mã hóa - Mã hóa tự động hóa dưới dạng chuỗi X chuyển tiếp N cơ sở.
- UnicodeEscape: = "\\ u" BaseEncode (Mã định danhCharNoEscape, 16, 4);
- Làm cho một lối thoát unicode trong thập lục phân, với các chuyển tiếp hex 4. Sự khác biệt giữa điều này và: [0-9A-Fa-f] {4} là tự động hóa kết quả với Mã hóa giới hạn tập hợp các giá trị thập lục phân được phép trong phạm vi của Định danhCharNoEscape. Vì vậy, nếu bạn cung cấp cho nó \ u005c, phiên bản mã hóa sẽ không chấp nhận giá trị. Những thứ như thế này có một cảnh báo nghiêm trọng: Sử dụng một cách tiết kiệm. Việc tự động hóa kết quả có thể khá phức tạp.
- UnicodeEscape: = "\\ u" BaseEncode (Mã định danhCharNoEscape, 16, 4);
Những gì không được triển khai là thế hệ CST, tôi cần điều chỉnh các tự động xác định để thực hiện bối cảnh thích hợp để làm việc này.
Đối với bất kỳ ai quan tâm, tôi đã tải lên một bản in đẹp của mẫu ban đầu của dự án T * y♯ . Mỗi tệp nên liên kết với mọi tệp khác, tôi bắt đầu liên kết theo các quy tắc riêng để tuân theo chúng, nhưng sẽ mất quá nhiều thời gian (sẽ tự động hóa đơn giản hơn!)
Nếu cần thêm ngữ cảnh, xin vui lòng gửi cho phù hợp.
Chỉnh sửa 5-14-2013 : Tôi đã viết mã để tạo đồ thị GraphViz cho các máy trạng thái trong một ngôn ngữ nhất định. Dưới đây là một sơ đồ đồ thị của GraphViz . Các thành viên được liên kết trong mô tả ngôn ngữ nên có một rulename.txt trong thư mục tương đối của họ với sơ đồ cho quy tắc đó. Một số mô tả ngôn ngữ đã thay đổi kể từ khi tôi đăng ví dụ, điều này là do đơn giản hóa mọi thứ về ngữ pháp. Đây là một hình ảnh graphviz thú vị .