Giả sử tôi muốn phân tích một chuỗi với các dấu ngoặc mở và đóng khác nhau (tôi đã sử dụng dấu ngoặc đơn trong tiêu đề vì tôi tin nó là phổ biến hơn - câu hỏi vẫn giống nhau) tôi nhận được tất cả các cấp cao hơn được phân tách trong một danh sách.Dấu ngoặc đơn phù hợp trong Scala --- phương pháp tiếp cận chức năng
Given:
[hello:=[notting],[hill]][3.4(4.56676|5.67787)][the[hill[is[high]]not]]
Tôi muốn:
List("[hello:=[notting],[hill]]", "[3.4(4.56676|5.67787)]", "[the[hill[is[high]]not]]")
Con đường tôi đang làm điều này là bằng cách đếm khai mạc và bế ngoặc và thêm vào danh sách bất cứ khi nào tôi nhận được truy cập của tôi đến 0. Tuy nhiên, tôi có một mã bắt buộc xấu xí. Bạn có thể giả định rằng chuỗi gốc được tạo thành tốt.
Câu hỏi của tôi là: phương pháp tiếp cận chức năng tốt đẹp cho vấn đề này là gì?
Lưu ý: Tôi đã nghĩ đến việc sử dụng cấu trúc năng suất nhưng tôi không thể có được điều kiện đơn giản (tôi cũng phải có điều kiện để cập nhật bộ đếm) và tôi không biết cách Tôi có thể sử dụng cấu trúc này trong trường hợp này.
Xem "combinators phân tích cú pháp": http://stackoverflow.com/search?q = scala + parser + combinators –
Trường hợp tương tự: http://blog.tmorris.net/haskell-scala-java-7-functional-java-java/. Mã trong các bình luận là bit hữu ích nhất. –
@AlexanderAzarov, mỗi lần tôi chơi với bộ phối hợp phân tích cú pháp, tôi cảm thấy mình sẽ cần nhiều kinh nghiệm hơn để thành thạo để có được giải pháp trong một thời gian gần như chắc chắn. Ở đây có quá mức không? – huynhjl