Loại bỏ đệ quy trái trong ngữ pháp trong khi duy trì liên kết trái của toán tử


13

Tôi có một vấn đề với bài tập này:

Đặt G là ngữ pháp mơ hồ sau đây cho phép tính:

E → v | λv.E | EE | (E)

Trong đó E là ký hiệu không đầu cuối duy nhất, λv.E đại diện cho sự trừu tượng viết biến v trong E và EE đại diện cho ứng dụng.

  1. Xác định ngữ pháp LL (1) G ′ sao cho L (G ′) = L (G) và sự mơ hồ của G được giải quyết bằng cách áp dụng các quy ước thông thường sau:
    1. trừu tượng là liên kết đúng;
    2. ứng dụng là liên kết trái;
    3. ứng dụng có mức độ ưu tiên cao hơn sự trừu tượng.
  2. Hiển thị bảng phân tích LL (1) cho G và cây phân tích thu được khi phân tích chuỗi λv1. λv2. v1v2v1.

Tôi đã loại bỏ ưu tiên thiết lập sự mơ hồ và liên kết, có được ngữ pháp này:

E -> EF | F
F -> λv.G | G
G -> (E) | v

mà không phải là LL (1), vì sản xuất E -> EFđược để lại đệ quy. Tuy nhiên, loại bỏ đệ quy trái từ sản xuất đó tôi có được:

E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v

không tuân thủ yêu cầu 1.2.

Tôi đã tìm kiếm một giải pháp trên Internet, nhưng có vẻ như không thể loại bỏ đệ quy bảo tồn tính liên kết trái.

Tuy nhiên, bài tập này đã xuất hiện trong bài kiểm tra trình biên dịch vài năm trước, vì vậy phải có câu trả lời đúng.

Cảm ơn sự giúp đỡ của bạn.

Câu trả lời:


12

Khả năng tương thích của phân tích trái và phân tích LL (1)

Bạn chỉ cần nhấn một trong những mâu thuẫn lớn trong việc sử dụng cú pháp không ngữ cảnh (CF). Mọi người muốn chọn ngữ pháp sao cho cây phân tích sẽ phản ánh cấu trúc dự định của câu, gần với ngữ nghĩa của nó, đặc biệt trong trường hợp các toán tử không liên kết, chẳng hạn như ứng dụng . Đây là khá nhiều mục đích ban đầu của ngữ pháp CF trong ngôn ngữ học. Nhưng đồng thời, họ đang tự ràng buộc mình vào công nghệ phân tích cú pháp sẽ chỉ chấp nhận một số loại ngữ pháp.

Thật vậy, nếu cây phân tích là để phản ánh tính kết hợp bên trái của một toán tử, thì ngữ pháp nhất thiết phải là đệ quy trái, vì nút ứng dụng hàng đầu trong cây phân tích nhất thiết phải thêm thuật ngữ ngoài cùng bên phải của các ứng dụng kế tiếp không phải là mệnh đề .. Vì vậy, phân tích LL là ra khỏi câu hỏi. Bạn đúng rồi.

Có hai cách trong số này. Một là không dựa vào trình phân tích cú pháp để đưa ra "cây phân tích cú pháp" được sử dụng cho các giai đoạn xử lý sau này (chẳng hạn như giảm biểu thức lambda, ở đây). Điều này dẫn đến khái niệm Cây cú pháp trừu tượng (AST) có thể được xây dựng từ cây phân tích cú pháp, nhưng có cấu trúc khác.

Giải pháp khác là sử dụng các Kỹ thuật phân tích cú pháp tổng quát hơn sẽ chấp nhận bất kỳ ngữ pháp CF nào và phân tích cú pháp theo nó. Trình phân tích cú pháp CF chung là một công nghệ phát triển tốt (và tôi không ngừng tự hỏi tại sao LL vẫn phổ biến như vậy).

Tôi không biết những gì có thể được coi là một câu trả lời thích hợp cho những yêu cầu mâu thuẫn này.

Những gì tôi sẽ làm là cho thấy họ đang mâu thuẫn với các yêu cầu. Đưa ra một ngữ pháp đầu tiên đáp ứng các ràng buộc về tính kết hợp và mức độ ưu tiên, sau đó chuyển đổi ngữ pháp thành ngữ pháp LL (1) để phân tích cú pháp.

Thực tế là một cái gì đó xuất hiện trong một tạp chí hoặc trong một kỳ thi không phải là một sự bảo đảm hoàn toàn mà nó là chính xác. Và tôi cũng có thể sai ... nhưng tôi đã kiểm tra, ngoài kiến ​​thức của riêng tôi về vấn đề này.

Về ví dụ cụ thể này

Điều này đang được nói, ngữ pháp đầu tiên bạn đang đề xuất có vẻ không hoàn toàn chính xác. Nó không có cách sản xuất λu.λv.v.

Một mẹo cần biết là bắt đầu với các toán tử (ở đây là trừu tượng hóa hoặc ứng dụng) với mức độ ưu tiên thấp nhất (trừu tượng hóa). Nó là tương tự cho các biểu thức số học.


Cảm ơn bạn rất nhiều vì bình luận chi tiết của bạn. Bạn nói đúng, tôi đã mắc lỗi với ngữ pháp đầu tiên, cảm ơn bạn vì điều này. Tôi sẽ hỏi giáo sư sau đó.
Marco DallaG

Tôi có thể thêm vào câu trả lời, với một lưu ý nhỏ về thiết kế ngữ pháp cho người giả (tôi cũng vậy), nếu bạn quan tâm. Ngoài ra, cho chúng tôi biết những gì giáo sư của bạn nói về điều này.
babou

Tôi sẽ cập nhật chủ đề khi giáo sư trả lời câu hỏi này. Dù sao, vui lòng thêm thông tin nếu đó không phải là vấn đề với bạn, tất nhiên tôi đánh giá cao điều đó rất nhiều. Cảm ơn bạn một lần nữa vì sự giúp đỡ của bạn
Marco DallaG

@MarcoDallaG Đã vượt qua điều này khi làm việc trên TAPL của Pierce. Có phải giáo sư của bạn đã nói bất cứ điều gì khác với câu trả lời này? :)
lcn

0

Nỗ lực của tôi:

E  -> A | λv.E
A  -> FA'
A' -> A | ɛ
F  -> (E) | v

Ngữ pháp này là LL (1) và nên tôn trọng các thuộc tính cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.