Size: a a a

2021 June 18

MP

Misha Puzanov in Haskell
типа есть урл, доступный через ipv4, но не через v6, а DNS первым возвращает v6 и все валится на тайм-ауте
источник

A

Andrey in Haskell
не, я не решал
источник

SM

Sergey Malenkov in Haskell
Всем привет! У кого-нибудь есть на примете нетривиальные open-source проекты, использующие polysemy или другие системы эффектов? Про https://github.com/github/semantic знаю
источник

L

Lierdakil in Haskell
немного некропост, но таки нет. монадические парсеры  эквивалентны рекурсивному спуску насколько я могу судить. рекурсивный спуск -- это не LL(k) и не LL(*). Можно попробовать сказать что рекурсивный спуск эквивалентен LL(∞), но это на мой вкус тоже не совсем корректно, потому что на самом деле не эквивалентен, ибо в рекурсивном спуске в разборе нетерминалов может быть произвольная хрень, в отличие от LL(∞).
источник

[

[BRM]White Rabbit in Haskell
А @kanashimia говорил, что это LL
источник

L

Lierdakil in Haskell
Ну он не прав. Я объяснил почему.
источник

L

Lierdakil in Haskell
Вопрос терминологии конечно. Но обычно под LL конкретную вещь подразумевают, а не любой разбор сверху-вниз слева-направо. В книге с драконом описан алгоритм для LL(k) (ну точнее там для LL(1), но LL(k) это очевидное расширение для любого фиксированного k). Рекурсивный спуск или монадический парсер -- строго более мощные.
источник

L

Lierdakil in Haskell
Ну из совсем очевидного, LL однопроходный, следовательно возврата нет. А в рекурсивном спуске или монадическом парсере -- пожалуйста, можно и с возвратом.
источник

N

Nikita Ursol in Haskell
Да
источник

N

Nikita Ursol in Haskell
Хотя разве LL(*) можно парсить без возврата?
источник

L

Lierdakil in Haskell
Смотря где считать возврат. В регулярке -- ну зависит от регулярки. А сам LL остаётся однопроходным.
источник

L

Lierdakil in Haskell
Там же смысл что предпросмотр удовлетворяет регулярке над терминалами ЕМНИП, и на каждом шаге LL решение принимается на основе матча с регуляркой. При этом от обычного LL(k) отличается только кусок отвечающий за выбор продукции.
источник

L

Lierdakil in Haskell
сама регулярка конечно может зайти в тупик и надо будет открутить назад, но тут уже от регулярки зависит.
источник

NI

Nick Ivanych in Haskell
Вроде бы, в монадических парсерах реализуемо GLL?
источник

NI

Nick Ivanych in Haskell
Но не видел, чтоб кто-то реализовал.
источник

L

Lierdakil in Haskell
В недетерминированные парсеры я не особо умею, так что без внятных комментариев. Алгоритм GLL читал, но дело было давно. Навскидку -- и рекурсивным спуском разбор GLL должно быть можно сделать, просто возвращать лес вместо дерева. Но даже если ограничиться детерминированными грамматиками, монады/рекурсия строго мощнее чем LL включая LL(*).
источник

L

Lierdakil in Haskell
источник

L

Lierdakil in Haskell
Кстати. Раз зашла речь. Касательно мощности чисто аппликативных парсеров у меня давно висит вопрос, чему они соответствуют и как соотносятся. Вроде понятно что аппликативные < монадических, но также несложно себя убедить что аппликативные >= LL(*)
источник

L

Lierdakil in Haskell
Хотя нет, секунду. А что делать с левой рекурсией всё-таки? GLL её должен кушать. Я не вижу как монадический парсер с ней справится.
источник

NI

Nick Ivanych in Haskell
И правда... Надо посмотреть точнее, что там говорили про реализацию GLL.
источник