Các chiến lược chung để giảm cây phân tích cú pháp (nghĩa là cây cú pháp cụ thể) thành cây cú pháp trừu tượng là gì?Làm cách nào để giảm cây phân tích cú pháp của tôi thành cây cú pháp trừu tượng?
Ví dụ, tôi có quy tắc ngữ pháp sau đây:
statement_list : statement
| statement_list statement
đó, nếu để như một cây phân tích cú pháp, sẽ tạo ra quạt đầu ra trông giống như
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
Nếu tôi nối con cái mỗi nút (vì danh sách câu lệnh không có ý nghĩa vốn có sau khi phân tích cú pháp), tôi có thể đạt được sau đây
program
definition
p_type
assignment
definition
assign
assignment
Điều này làm việc tốt - tuy nhiên, tôi không biết về bất kỳ "quy tắc" để làm điều này. Có quy tắc ngữ pháp cụ thể nào tôi nên tìm cách đơn giản hóa không? Nó có phải là vấn đề của cảm giác, hay là có một quá trình cơ học hơn?
Bạn có thể sử dụng "cảm giác", nhưng phần lớn là rất nhiều công việc. Bạn có thể làm điều này về cơ bản về cơ học bằng cách loại bỏ các nút mà bạn có thể tạo lại bằng cách sử dụng ngữ pháp. Xem http://stackoverflow.com/a/1916687/120163 –