Tôi viết một phân tích cú pháp cho một ngôn ngữ, và máy quét được thiết kế đểnút Đưa vào cây phân tích cú pháp mà không nên có mặt ở đó
- một trong hai cũng quay trở lại bến không cần thiết (ví dụ whitespacing) HOẶC
- không để làm như vậy
dựa trên cờ boolean.
Bây giờ, trong trình phân tích cú pháp, tôi không muốn làm lộn xộn ngữ pháp với tất cả các thiết bị đầu cuối đó, chúng nên được nuốt bằng cách nào đó "tự động" bằng cây phân tích mà tôi đang xây dựng. Để làm điều này "ma thuật", tôi nghĩ rằng tôi sẽ chuỗi các thiết bị đầu cuối (chỉ đơn giản là liên kết danh sách tròn) vì vậy tôi chỉ có thể lặp lại chúng và "điền vào chỗ trống" như giảm xảy ra (Tôi đang sử dụng một LALR (1 Miễn phí) (0)) trình tạo phân tích cú pháp).
Nghe có vẻ như là một ý tưởng lành mạnh, mặc dù có một vấn đề. Hãy nhớ tôi đã nói "để trở về ... hay không"? Trong kịch bản (2), tôi sẽ giải phóng thiết bị đầu cuối, bởi vì ai biết điều gì sẽ xảy ra tiếp theo? Và tôi không muốn bất kỳ rò rỉ bộ nhớ nào.
Nhưng trong trường hợp (1), tôi không thể giải phóng thiết bị đầu cuối, bởi vì dựa trên chúng tôi sẽ quyết định giảm thêm khi quy trình "điền vào chỗ trống" sẽ dừng lại.
Tôi không thể giải phóng điều kiện này, vì cùng một lý do: Tôi không biết điều gì sẽ xảy ra tiếp theo. Điều gì sẽ xảy ra nếu không có bất kỳ quy trình "điền vào chỗ trống nào" được kích hoạt? Điều gì sẽ xảy ra nếu không giảm thêm nữa?
Bạn có gặp sự cố tương tự không? Bạn đã giải quyết nó như thế nào?
Lưu ý: đây là tất cả trong tâm trí của tôi và tôi có thể chưa giải thích rõ ràng, vui lòng hỏi và tôi sẽ chỉnh sửa câu hỏi của mình. Kịch bản thực sự phức tạp hơn một chút, tôi không viết điều này từ đầu, nơi tôi có thể sử dụng trí tưởng tượng của mình, tôi tích hợp nó vào một thứ khác, vì vậy có thể tôi sẽ trả lời với "Tôi không thể làm điều đó vì những hạn chế về môi trường ".
Phụ Lục
duy nhất ý tưởng thực sự tốt mà nói đến cái tâm của tôi là đến ngã ba và cải thiện các máy phát điện phân tích cú pháp, mà tôi đã thực hiện ở một số nơi nhỏ ở đây và ở đó, để khắc phục một số những những hạn chế tôi đã đề cập ở trên.
Tôi biết mình muốn gì và muốn có khoảng trắng trong cây. Có thật không. Nó chỉ là những gì tôi muốn không phải là điều bình thường mọi người muốn. Và tôi có lý do chính đáng để có những thẻ đó trong cây. Lý do thực sự tốt. Không có lý do đó, tôi sẽ không làm điều đó ngay từ đầu. Nhưng cảm ơn vì đã cảnh báo tôi về điều đó. – Flavius
Vâng, rõ ràng là bạn biết những gì bạn muốn. Nói rằng bạn có lý do thực sự tốt mà không giải thích chúng, hoặc đặc biệt cho chúng tôi biết hiệu ứng cuối cùng mà bạn hy vọng đạt được, sẽ giúp bạn "câu trả lời thông thường nói ...". ... Nếu bạn muốn đi theo lộ trình độc đáo, bạn có thể khái quát hóa những gì chúng tôi đã làm với DMS: đính kèm các mã thông báo của bạn (cả khoảng trống và nhận xét) dưới dạng chuỗi vào các mã thông báo ngôn ngữ. –
Vâng, đó là những gì tôi đã làm, giống như tôi đã đề cập trong câu hỏi, sử dụng danh sách liên kết, mặc dù tôi đã kết thúc bằng cách sử dụng một liên kết hai lần. Tuy nhiên, mức tiêu thụ bộ nhớ vẫn làm phiền tôi, hai thành viên con trỏ thêm cho các thẻ là khá nhiều, phải không? Tôi không biết, tôi đoán tôi sẽ hoàn thành mẫu thử này và xem nó hoạt động như thế nào. – Flavius