Size: a a a

Clojure — русскоговорящее сообщество

2021 September 01

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
ну, я в них не особенно, ибо не каждый день (даже не каждую неделю) но когда припирает, читаю минут 30 доку и нормально. Правда лет 15 назад на перле из в хвост и в гриву...
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
в принципе, тут и парсер-то достаточно простой, ловим livecheck в потоке и переключаем контекст на url  и  end, далее, переключаем обратно. поток - считываем файло построчно
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
в регекспе ловить что-то в многострочной мешанине можно, но не факт, что быстрее будет... хотя если файло сразу в память считать, без прелюдии, то да...
источник

T

Tim in Clojure — русскоговорящее сообщество
отличная идея, спасибо!
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
можно еще и так
Pattern.compile("(livecheck).+что-то-там-еще", Pattern.MULTILINE);
источник

T

Tim in Clojure — русскоговорящее сообщество
да, сорри, что без деталей. точно задачу пока сложно сформулировать, хотел узнать какие подходы тут можно использовать.

регексп кажется сломается, когда в таком файле окажется рубишный код. по стандарту этого блока, такоой код иногда попадается. но в целом как вариант пока не отбрасываю.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
но это уже над регекспом корпеть надо...
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Может просто этот файлик в json перегнать?
Нужно только написать реализацию этого dsl. В этом случае достаточно method_missing.
источник

T

Tim in Clojure — русскоговорящее сообщество
да, надо в json перегнать. а что за method_missing?

для dsl как-то использовал instaparse, но там потом геморрой с парсингом синтаксического дерева. может какую-то библиотеку посоветуете?
источник

VP

Vladimir Potapev in Clojure — русскоговорящее сообщество
Ещё можно такое попробовать: https://github.com/Engelberg/instaparse
источник

T

Tim in Clojure — русскоговорящее сообщество
ага, использовал её раньше. минус - надо описать всю рубишную грамматику и потом возиться с парсингом синтаксического дерева (ast)
источник

VP

Vladimir Potapev in Clojure — русскоговорящее сообщество
А, ок тогда)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Если задача гораздо серьезнее, чем достать в блоке url, то наверное парсеры помогут, ну а так, больше времени убьете на сам парсер.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
касательно мультилайнового регекспа, здесь немного знания можно ложечкой черпануть - https://stackoverflow.com/questions/3651725/match-multiline-text-using-regular-expression
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Ну тут нужно ruby знать.
cask это метод модуля Kernel. Объявляется через def cask(&block)
Еще нужен класс- потомок BasicObject. А в нем def method_missing.
И потом obj.instance_eval &block.
И получается, что у этого объекта будут вызываться методы, что указаны в блоке cask. Но методов то нет, но есть method_missing, который вызывается когда метода нет. Таким образом в объектк можно сохранить все нужные значения и потом получить json
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Странно конечно руби код парсить кложей.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
но по хорошему, нам нужно сначала блок выделить до end, и в нем искать - с регекспом будет напряжно - простой построковый парсер со сменой состояния пишется в строк 10 максимум
источник

v

vveare138 in Clojure — русскоговорящее сообщество
источник

v

vveare138 in Clojure — русскоговорящее сообщество
это не подойдет?
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
один вопрос - зачем парсер, если задача тривиальная?
источник