Off đỉnh đầu của tôi:
Tôi muốn làm việc một cách đệ quy (về cơ bản đối lập với một phân tích cú pháp phong nha đệ quy) sử dụng một số chẩn đoán về những việc cần làm với dãy ((...)
: lẽ chọn một cách ngẫu nhiên) optionals (?
: xem [], bên dưới), lặp lại ('' Phân bố Poisson?). Literals ("..."
) được viết đơn giản cho đầu ra, và subtokens (`<...> ') tạo ra một đệ quy.
Điều này không quá khó trừ khi bạn muốn đảm bảo một số loại bảo hiểm hoàn chỉnh. Thậm chí sau đó, chỉ cần tạo một số bó dữ liệu sẽ là trợ giúp ...
[*] Bạn cần phải bao gồm optionals ít hơn 50% thời gian để ngăn chặn thoái vô hạn khi xử lý các rules như
nonterm: otherstuff <nonterm>?
Good catch bởi plinth.
Tương tự như vậy với sự lặp lại, hãy ném một bản phân phối hội tụ mạnh mẽ.
Trước tiên, bạn cần phân tích ngữ pháp đầu vào nếu ngữ cảnh được trình bày dưới dạng BNF như sau. Điều đơn giản nhất để làm là sử dụng ánh xạ (name, string)
, sau đó bắt đầu với mã thông báo mức cao nhất (bạn có thể giả định là mã thông báo đầu tiên ...).
này mang đến cho bạn:
("chương trình", "< nhập khẩu > NEWLINE <namespace>? ")
(" nhập khẩu", ("nhập khẩu" < định danh > NEWLINE) *)
...
Các bạn bắt đầu với "chương trình", nhấn "< nhập >" để bạn tái diễn ... khi quay lại, lịch sử "NEWLINE?", vì vậy hãy ném xúc xắc và viết hay không, nhấn "< không gian tên >" để tiếp tục ... trên bạn đã hoàn thành.
Tôi thấy tự nghi ngờ rằng điều này đã được thực hiện trước đây. Nếu bạn chỉ cần đầu ra, tôi sẽ tìm kiếm trên web ... Có lẽ http://portal.acm.org/citation.cfm?doid=966137.966142, mặc dù số lượng lớn các trình tạo phân tích cú pháp có thể làm lộn xộn không gian tìm kiếm ... Hãy thử this paper.
BTW-- Trường đại học địa phương có thể có đăng ký trực tuyến với các tạp chí này, vì vậy bạn có thể tải chúng miễn phí bằng cách đăng ký tại thư viện.
Xem http://stackoverflow.com/a/41434860/120163 –