Предположим, что я хочу проанализировать строку с различными открывающими и закрывающими скобками (я использовал круглые скобки в названии, потому что считаю, что это более распространено - вопрос тем не менее тем не менее), поэтому что я получаю все высшие уровни, разделенные в списке.Скобки, сопоставимые в Scala --- функциональный подход
Дано:
[hello:=[notting],[hill]][3.4(4.56676|5.67787)][the[hill[is[high]]not]]
Я хочу:
List("[hello:=[notting],[hill]]", "[3.4(4.56676|5.67787)]", "[the[hill[is[high]]not]]")
Как я делаю это путем подсчета открытия и закрытия скобки и добавив к списку всякий раз, когда я получаю свой счетчик в 0. Однако у меня есть уродливый императивный код. Вы можете предположить, что исходная строка хорошо сформирована.
Мой вопрос: что было бы хорошим функциональным подходом к этой проблеме?
Примечания: Я подумал о том, как использовать конструкцию for ... yield, но при использовании счетчиков я не могу получить простой условный (у меня должны быть условные обозначения только для обновления счетчиков), и я не знаю, как Я мог бы использовать эту конструкцию в этом случае.
Смотрите "комбинаторы синтаксического анализа": http://stackoverflow.com/search?q = scala + парсер + комбинаторы –
Аналогичный случай: http://blog.tmorris.net/haskell-scala-java-7-functional-java-java/. Код в комментариях является самым полезным битом. –
@AlexanderAzarov, каждый раз, когда я играю с комбинаторами парсера, я чувствую, что мне понадобится больше опыта, чтобы быть опытным, чтобы получить решение в течение почти определенного времени. Это переполнено здесь? – huynhjl