5

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?

+1

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 –

Trả lời

3

Nó không phải là vấn đề "cảm thấy". Một cây cú pháp trừu tượng phụ thuộc vào ý nghĩa (ngữ nghĩa) của những gì được phân tích cú pháp và tôi nghĩ rằng đây sẽ là các quy tắc:

  1. Xóa các nút cho thẻ không thêm ý nghĩa. Đó là các từ khóa trung gian (như "sau đó"), dấu tách (như dấu phẩy) và dấu ngoặc vuông (như dấu ngoặc đơn).
  2. Quảng bá các thẻ có ý nghĩa (như "if") làm cha mẹ của các mã thông báo khác trong cùng một quy tắc.

Không có công thức duy nhất. Nó phụ thuộc vào những cụm từ trong ngôn ngữ đích có nghĩa là gì.

+0

Tôi đánh giá cao câu trả lời, nhưng có vẻ như bạn đang mâu thuẫn với bản thân. Bạn nói rằng "Nó không phải là vấn đề 'cảm thấy'" nhưng quy tắc của bạn phụ thuộc vào ngôn ngữ. Nếu có một số số liệu để đi theo thì tôi sẽ đồng ý nó không phải là một vấn đề cảm thấy, nhưng vì nó đứng nó chắc chắn cảm thấy như vậy. – sdasdadas

+0

Tôi sẽ thừa nhận bất kỳ ngày nào thiết kế (thiết kế ngôn ngữ nói riêng) là 50/50 kỹ thuật/cảm nhận. Điều đó có tốt không? – Apalala

+0

Có, tất nhiên, xin lỗi - tôi quên quay trở lại câu hỏi này. Cảm ơn đã giúp đỡ. – sdasdadas

Các vấn đề liên quan