SPAN dường như là một loạt các loại bản ghi, mỗi bản ghi có nhiều chi tiết. Cần phải đơn giản để xác định một ngữ pháp cổ điển bao gồm tất cả các bản ghi (như nonterminals), về bất kỳ subrecords (như nonterminals) và kiểu dữ liệu đầu cuối đại diện cho các kiểu dữ liệu khác nhau được xác định bởi SPAN. Có thể có rất nhiều nonterminals, nhưng điều đó chỉ làm cho một ngữ pháp lớn, nhưng không phải là phức tạp.
Hầu hết các ngôn ngữ lập trình có một bộ mã thông báo thiết bị đầu cuối nhỏ thường có thể xuất hiện ở mọi nơi. Sự thật là các ngữ pháp xác định những kỳ vọng về những gì có thể xuất hiện tiếp theo (được gọi là các tập "đầu tiên" và "theo dõi" trong tài liệu phân tích LR), bao gồm một tập các thiết bị đầu cuối rất hạn chế. Ngữ pháp SPAN sẽ không khác; mỗi "phân tích trạng thái" của một trình phân tích cú pháp ngụ ý một tập hợp các thiết bị đầu cuối giới hạn tiếp theo và một tổ chức một trình phân tích cú pháp để tận dụng điều này. (Tôi đã xây dựng các trình phân tích cú pháp L (AL) R, và người ta có thể dễ dàng sử dụng trạng thái "hiện tại" để xác định tập con các thiết bị đầu cuối có thể xảy ra tiếp theo). Vì vậy, một trình phân tích cú pháp SPAN có thể xác định chỉ một tập các thẻ nhỏ có thể xảy ra tiếp theo trong mỗi trạng thái, và sử dụng nó để chọn các characaters bao gồm các mã thông báo tiếp theo (chúng phải tạo thành các bộ phân tách!).
Một cách dễ dàng để thực hiện điều này là với một recursive descent parser.
Vì vậy, tôi cho rằng tất cả những gì máy móc thiết bị phân tích cú pháp sẽ là tốt cho phân tích SPAN, với một số chút công việc tùy chỉnh có thể nhặt các thẻ.
Hành động phân tích cú pháp cho các trình phân tích cú pháp thông thường xây dựng các cây, nhưng dễ dàng để điền các trường của cấu trúc dữ liệu.
Nguồn
2010-08-19 02:18:36